7

我已经看到它在代码中的表现有所不同,但是在常规()函数执行上执行(空白参数) .call / .apply是否有任何好处或理由。

这当然是一个过于简单的例子

var func = function () { /* do whatever */ };

func.call();
func.apply();

VERSUS只是简单的括号。

func();

在任何地方都没有看到任何关于此的信息,我知道为什么在传递参数时使用调用/应用。

4

2 回答 2

6

当您使用 调用方法时func();,方法this内的变量指向window对象。

当您使用call(...) / apply(...)时,传递给方法调用的第一个参数变为方法this内部。如果您没有传递任何参数/传递 null 或 undefined,那么this成为非严格模式下的全局对象

于 2013-04-09T13:53:19.947 回答
0

是的,在某些情况下有一个重要的区别。例如,处理回调。假设您有一个带有构造函数的类,该类接受callback参数并将其存储在this.callback. 稍后,当通过调用此回调时this.callback(),外部代码突然通过 获取对您的对象的引用this。它并不总是可取的,this.callback.call()在这种情况下使用会更好/更安全。

这样,外部代码将得到undefinedasthis并且不会尝试意外修改您的对象。并且正确编写的回调不会受到这种用法的影响call(),因为它们会提供定义为箭头函数或绑定函数(通过.bind())的回调。在这两种情况下,回调将有自己的,正确的 this,不受 影响call(),因为箭头和绑定函数只是忽略由 设置的值apply()/call()

于 2018-06-28T08:16:20.483 回答