我在 javascript 中学到了新事物/概念。使用另一个函数作为参数调用函数,请看一下这个小提琴示例
ProgressBar(1, 2, function() { flag=true; console.log(' After flag : '+flag);}, flag);
ProgressBar(1, 2, flag);
查看控制台语句,我已经了解了效果是什么,但很少混淆这个概念在哪里证明非常重要/有用。
我在 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);
});
在上面的例子中,直到回调 的值calcPercentage(obtained_marks,total_marks)
才会调用。因此,这就是 JavaScript 中这两种函数之间的区别,我还发布了示例以供您指导。getObtainedMarks
obtained_marks
最常见的用例是您希望仅在发生其他事情后才调用函数。
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]