1. 回调函数是什么
回调函数就是函数A执行完之后,有一个函数B用来做其他的事情。
一般是将函数B,作为参数,传入到函数A中。
2.实现方法
2.1 使用命名函数
function A(callback){ console.log("A执行") callback(); } function B(){ //B是回调函数 console.log("B执行"); } // 使用 A(B); //这里的B没有括号。 // 输出 A执行 B执行
2.2 匿名回调函数
function A(num1, num2, callback){ var sum = num1 + num2; callback(sum); } // 使用 A(1, 2, function(sum){ console.log(sum); }); // 输出 3
3.使用含有this对象的回调函数
var obj={ name:"", setName:function(name){ this.name=name; } } function A(name,callback){ callback(name); } //调用 A('syl',obj.setName); //检测 window.name; 输出:"syl" //检测 obj.name; 输出:""
本来我们是希望obj的name是“syl”,但是却没有,这是因为A函数属于全局环境,导致name属性的也属于全局环境。所以我们需改变name的环境,即改变this的环境。
var obj={ name:"", setName:function(name){ this.name=name; } } function A(name,callback,obj){ callback.call(obj,name); } //调用 A('syl',obj.setName,obj); //检测 window.name; 输出:"" //检测 obj.name; 输出:"syl"
一个很好的例子:
比如爬楼梯,你要成功爬上1楼,才能爬2楼,然后三楼
function floors(isSuccess,callback ){ if (isSuccess) { // 如果成功就执行回调函数 callback(); } } function pa1() { // 爬一楼 //todo: ... console.log('爬一楼'); return true; } function pa2() { //todo: ... console.log('爬二楼'); return true; } floors(pa1(),function() { floors(pa2(), function(){ floors(3, function(){ console.log('ok') }) }) }) 原文:https://blog.csdn.net/wangweiscsdn/article/details/84000826
半夏话前端
微信公众号
帮助更多人成长!