使用call和apply调用函数有什么区别?
call
apply
var func = function() { alert('hello!'); };
func.apply(); 与 func.call();
func.apply();
func.call();
前述两种方法之间是否存在性能差异?什么时候最好使用callover apply,反之亦然?
不同之处在于apply,您arguments可以使用数组作为函数来调用函数。call需要明确列出参数。有用的助记是 “ 甲用于 一个rray和ç为 ÇOMMA”。
arguments
有关apply和call的信息,请参见MDN的文档。
伪语法:
theFunction.apply(valueForThis, arrayOfArgs)
theFunction.call(valueForThis, arg1, arg2, ...)
从ES6开始,spread数组call也可以与该函数一起使用,您可以在此处查看兼容性。
spread
样例代码:
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