Function.prototype.apply()使用和Function.prototype.call()调用函数有什么区别?* {2 A* b' m8 @6 ?. O& p
var func = function() { alert('hello!');};func.apply();` 对比 `func.call();9 n! S0 M ?' e
上述两种方法之间是否存在性能差异?什么时候最好使用?callover apply,反之亦然?; Y5 a5 @. K' t d% f; r) f
$ Z6 M" U! y. y b 解决方案: ! d, o: i1 Q {( J9 K& u6 o2 Z 区别在于apply,函数你可以arguments作为数组调用;call要求列出参数。有用的助记符是“ A代表数组,C代表逗号”。( A; ~$ e/ [. I) Q
请参阅 MDN 关于apply和call的文档。 0 j, l$ j) H3 K, a- V伪语法: : c$ n$ b2 `/ W' E0 I% {9 CtheFunction.apply(valueForThis,arrayOfArgs)theFunction.call(valueForThis,arg1,arg2,...)从 ES6 开始,还可以spread您可以在这里使用数组和函数call检查兼容性。3 i" x- f0 x- q, X! ?2 F% r
示例代码:8 d) n% q: _0 f4 k
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 U \8 w: T7 _2 w+ H