为了账号安全,请及时绑定邮箱和手机立即绑定

呼叫和应用有什么区别?

呼叫和应用有什么区别?

当年话下 2019-06-03 14:02:51
呼叫和应用有什么区别?使用call和apply去调用一个函数?var func = function() {   alert('hello!');};func.apply();VSfunc.call();上述两种方法之间是否存在性能差异?什么时候最好用call过关apply反之亦然?
查看完整描述

4 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

基本上,他们在处理函数参数的方式上有所不同。

Apply()方法与调用()完全相同,但Apply()需要一个数组作为第二个参数。数组表示目标方法的参数。“

因此:

// assuming you have ffunction f(message) { ... }f.call(receiver, "test");f.apply(receiver, ["test"]);


查看完整回答
反对 回复 2019-06-03
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

若要回答有关何时使用每个函数的部分,请使用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如果你这么做会更快。


查看完整回答
反对 回复 2019-06-03
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

这是一个很好的助记符。Apply用途A射线和A总是有一两次争论。当你使用C你要做的就是C算出参数的数量。


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 456 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信