蝴蝶刀刀
若要回答有关何时使用每个函数的部分,请使用apply如果您不知道要传递的参数的数量,或者它们已经在数组或类似数组的对象中(如arguments对象以转发您自己的参数。使用call否则,因为不需要将参数包装在数组中。f.call(thisObject, a, b, c); // Fixed number of argumentsf.apply(thisObject, arguments);
// Forward this function's argumentsvar args = [];while (...) {
args.push(some_value());}f.apply(thisObject, args); // Unknown number of arguments当我没有传递任何参数时(比如你的例子),我更喜欢call既然我呼叫功能。apply意味着你是应用(不存在的)参数的函数。不应该有任何性能差异,除非您使用apply并将参数包装在数组中(例如,f.apply(thisObject, [a, b, c])而不是f.call(thisObject, a, b, c))。我还没有测试它,所以可能会有差异,但它将非常特定于浏览器。很可能call如果数组中没有参数,并且apply如果你这么做会更快。