何时使用调用javascript函数作为参数及其优点
When to use calling javascript functions as parameter and its advantages
我在javascript中学到了一个新东西/概念。使用另一个函数作为参数调用函数,请看看这个小提琴的例子
传递函数作为参数
ProgressBar(1, 2, function() { flag=true; console.log(' After flag : '+flag);}, flag);
正常功能。
ProgressBar(1, 2, flag);
通过查看控制台语句,我已经理解了效果,但不太清楚这个概念在哪里会被证明非常重要/有用。
JavaScript是异步语言,编译器连续读取下一行,不等待函数的返回值。因此,在这种情况下,如果我们的操作依赖于其他操作,那么我们就无法通过在"JavaScript"中使用简单函数来实现这一点。
就像我说的,在创建考试成绩表时。我需要所有科目的总分或总分。计算完总分后,我将能够计算百分比,如果我没有总分,那么我就无法计算百分比。
示例:
function getObtainedMarks(student_id){
//get the total marks from server and it takes little more time
return obtained_marks;
}
function calcPercentage(obtained_marks,total_marks){
return ((obtained_marks/total_marks)*100);
}
var total_marks = 500; var obtained_marks = getTotalMarks(101);
var percentage = calcPercentage(obtained_marks,total_marks);
在上面的例子中,percentage
的最终值将是undefined
,因为当我们调用getObtainedMarks
时,它通过向服务器发送请求来计算总数,但与此同时,编译器移动到下一个语句,即var percentage = calcPercentage(obtained_marks,total_marks);
因此,JavaScript在这里引入了回调函数,我们实际上将我们的操作绑定到了一些依赖的操作上。
例如:
function getObtainedMarks(student_id,callback){
//get the total marks from server and it takes little more time
callback(obtained_marks);
}
function calcPercentage(obtained_marks,total_marks){
return ((obtained_marks/total_marks)*100);
}
var total_marks = 500;
getTotalMarks(101,function(obtained_marks){
var percentage = calcPercentage(obtained_marks,total_marks);
});
在上面的示例中,只有getObtainedMarks
回调obtained_marks
的值后,calcPercentage(obtained_marks,total_marks)
才会调用。所以,这就是JavaScript中这两种函数之间的区别,我也发布了这个例子供您参考。
最常见的用例是希望只有在发生其他事情后才调用函数。
function andAlertTheUser() { ... }
setTimeout(andAlertTheUser, 5000);
document.addEventListener('click', andAlerttheUser);
xhr.addEventListener('load', andAlertTheUser); xhr.send();
另一种情况是,您有一个API,它对多个事物执行操作,并且您希望该操作可以从调用该API的任何代码中自定义。
function doSomethingToEachItemInTheArray() { ... }
var arr = [1,2,3,4]
arr.forEach(doSomethingToEachItemInTheArray);
排序就是一个很好的例子。例如,您可能希望拥有自己的排序逻辑来对数组进行排序。
var arr = [20,4, 51, 22, 44];
function sortAsc(a, b){
return a>b ? 1 : -1;
}
arr.sort(sortAsc); // passing your sorting logic as a function to sort method.
console.log(arr); // prints [4,20,22,44,51]
- 使用html表单中的参数调用JavaScript函数
- 如何在ES6类中使用参数调用函数
- 如何使用OnClick事件通过参数调用来调用PHP函数
- Worklight Client使用自定义BODY参数调用过程
- 如何在jQuery AJAX中使用参数调用PHP函数
- 如何使用参数调用java脚本函数,其中参数来自字符串变量
- 使用数组-apply()中的参数调用函数,但不使用上下文参数
- 如何使用JQuery.ech()中分配给变量的参数调用函数
- 如何用参数调用coffescript函数
- 使用与父函数相同的参数调用函数
- 使用动态参数调用函数
- 使用来自 asp.net 的参数调用 Java 脚本函数
- 设置 JavaScript 以使用不同的参数调用函数
- 在 javascript 函数中使用参数调用 java 函数
- 使用参数调用 JavaScript 处理程序
- 如何使用在 jscript 中声明的参数调用 Html.RenderAction()
- Firebase 承诺 - Query.once 失败:使用 1 个参数调用.预计至少 2
- 有没有办法通过另一个函数参数调用函数
- 在 PHP 中使用多个参数调用 js 函数
- 使用来自另一个函数的对象参数调用函数