var func = function() { alert('hello!');};func.apply();` 对比 `func.call();: `7 A0 f4 C* ?, N* y
上述两种方法之间是否存在性能差异?什么时候最好使用?callover apply,反之亦然?) l( `6 J, r5 a
6 ^5 I5 U% k- ]3 R( o解决方案: - u: Z, x- w- W, @) T) G' q
区别在于apply,函数你可以arguments作为数组调用;call要求列出参数。有用的助记符是“ A代表数组,C代表逗号”。 4 {8 m7 f9 R0 F$ N9 w请参阅 MDN 关于apply和call的文档。 ! F1 F! s# F# Z9 u伪语法:9 t/ b- a0 z/ B" y, `' r0 o1 a
theFunction.apply(valueForThis,arrayOfArgs)theFunction.call(valueForThis,arg1,arg2,...)从 ES6 开始,还可以spread您可以在这里使用数组和函数call检查兼容性。7 k; E% T; t q& i* J. U" ?
示例代码:% }6 k- v7 M! `" _1 d6 u. o
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 operator0 f, }" }8 f( [0 K