使用函数和调用函数有什么区别?Function.prototype.apply()
Function.prototype.call()
var func = function() {
alert('hello!');
};
func.apply();
与func.call();
上述两种方法之间是否存在性能差异?什么时候最好使用,反之亦然?call
apply
网友回答:
K·斯科特·艾伦(K. Scott Allen)对此事有一篇很好的文章。
基本上,它们在如何处理函数参数方面有所不同。
apply() 方法与 call() 相同,只是 apply() 需要一个数组作为第二个参数。数组表示目标方法的参数。
所以:
// assuming you have f
function f(message) { ... }
f.call(receiver, "test");
f.apply(receiver, ["test"]);
网友回答:
不同之处在于允许您将函数作为数组调用; 需要显式列出参数。一个有用的助记符是“A 代表 rray 和 C 代表 comma”。apply
arguments
call
请参阅 MDN 关于申请和调用的文档。
伪语法:
theFunction.apply(valueForThis, arrayOfArgs)
theFunction.call(valueForThis, arg1, arg2, ...)
从 ES6 开始,数组也可以与函数一起使用,您可以在此处查看兼容性。spread
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
网友回答:
要回答有关何时使用每个函数的部分,如果您不知道将要传递的参数数量,或者它们已经在数组或类似数组的对象(例如转发您自己的参数的对象)中使用。否则使用,因为不需要将参数包装在数组中。apply
arguments
call
f.call(thisObject, a, b, c); // Fixed number of arguments
f.apply(thisObject, arguments); // Forward this function's arguments
var 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
模板简介:该模板名称为【调用和应用有什么区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。