call和apply,他们的作用都是将函数绑定到另外一个对象上去运行。
1、每个函数都包含两个非继承而来的方法:apply()和call()。
2、他们的用途相同,都是在特定的作用域中调用函数。
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。
链接:https://www.nowcoder.com/questionTerminal/5e97b94794bd438f893137b2d3b28a6a
来源:牛客网
在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者apply的第一个参数传入即可。
1
2
3
|
function speak(fn, obj) {
return fn.apply(obj, obj);
}
|
链接:
https://www.nowcoder.com/questionTerminal/80365a2685144559817e3d5e0c27f3a8
来源:牛客网
来源:牛客网
调用函数可以使用call或者apply这两个方法,区别在于call需要将传递给函数的参数明确写出来,是多少参数就需要写多少参数。而apply则将传递给函数的参数放入一个数组中,传入参数数组即可。
1
2
3
|
function argsAsArray(fn, arr) {
return fn.apply( this , arr);
}
|