8、回调函数
回调就是一个函数的调用过程。
函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。这个过程叫回调。
函数a的事先干完,回头再调用函数b。这里必须清楚一点:函数b是你以参数形式传给函数a的,那么函数b就叫回调函数。
apply()函数有两个参数:
第一个参数是上下文,
第二个参数是参数组成的数组。如果上下文是null,则使用全局对象代替。
例如:function.apply(this,[1,2,3])
call()的第一个参数是上下文,后续是实例传入的参数序列,例如:function.call(this,1,2,3);
- call()个方法;
语法: call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj 可选项。将被用作当前对象的对象。
arg1, arg2, , argN 可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
上面的一堆我们用代码来简单梳理下:
function person(){
var name = 'wyang';
var age = 26;
console.log(name+','+age);
}
function one(){
var name = 'wangyang';
var age = 27;
console.log(name+','+age);
}
person.call(one); //wyang,26
上面的例子是person把one替换掉了。所以输出的就是wyang和26;
下面我们用call方法做一个继承的例子。
function person(){
this.name = 'wyang';
this.age = 26;
}
function one(){
person.call(this);
console.log(this.name);
}
one(); //wyang,age
上面例子person本身作为对象定义一个值为wyang的属性name;然后在one函数里通过call方法把person的属性继承给自己。调用one函数输出wyang;
二、通过call方法实现的回调函数
function person(callback){
console.log(name);
callback.call(this);
}
function one(){
var name = 'wyang';
console.log(name);
}
person(one); //wyang;wyang
上面例子中的person定义一个形参为callback;
通过call方法把形参callback替换掉自己;
函数one中命名一个变量name并设定值为wyang;
然后调用person函数,并把one函数作为参数传进去。
可以看到输出两次wyang;这说明在函数person里面接收到了one函数里面的name变量的值;
而one函数作为参数在person函数内通过call方法把person替换掉,在调用person函数的时候,one函数也被成功调用,然后成功输出;
三、通过普通方式的回调
function person(callback){
console.log(name);
callback();
}
function one(){
var name = 'wyang';
console.log(name);
}
person(one); //wyang;wyang
上面例子中我们把call方法去掉,直接在函数person内部调用参数callback;
然后把one函数作为参数传递进去;
需要注意的是:javascript中的函数是对象,one作为一个函数名是对Function对象的引用,所以在person函数内部调用callback参数时,要加'()';不然传递的只是一个函数名而已,并不是函数对象本身;
本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记。有不正确之处请各位高手多多指点,一起学习进步。【VX:czlingyun 暗号:CSDN】