电话和申请有什么区别?

2022-08-29 21:47:41

使用函数 和 调用函数有什么区别?Function.prototype.apply()Function.prototype.call()

var func = function() {
  alert('hello!');
};

func.apply();func.call();

上述两种方法之间是否存在性能差异?什么时候最好使用over,反之亦然?callapply


答案 1

不同之处在于,允许您以数组的形式调用函数; 要求显式列出参数。一个有用的助记词是A代表rray,C代表comma”。applyargumentscall

请参阅MDN关于申请呼叫的文档。

伪语法:

theFunction.apply(valueForThis, arrayOfArgs)

theFunction.call(valueForThis, arg1, arg2, ...)

从ES6开始,还有可能扩展数组以与函数一起使用,您可以在此处看到兼容性。call

示例代码:

function theFunction(name, profession) {
    console.log("My name is " + name + " and I am a " + profession +".");
}
theFunction("John", "fireman");
theFunction.apply(undefined, ["Susan", "school teacher"]);
theFunction.call(undefined, "Claude", "mathematician");
theFunction.call(undefined, ...["Matthew", "physicist"]); // used with the spread operator

答案 2

K. Scott Allen对此事有很好的描述

基本上,它们在处理函数参数的方式上有所不同。

apply() 方法与 call() 相同,只是 apply() 需要一个数组作为第二个参数。数组表示目标方法的参数。

所以:

// assuming you have f
function f(message) { ... }
f.call(receiver, "test");
f.apply(receiver, ["test"]);