我已经看到它在代码中做了不同的做法,但是对于常规()<做一个(空白参数) .call / .apply 是否有任何好处或理由/ strong>功能执行。
这当然是一个过于简化的例子
var func = function () { /* do whatever */ };
func.call();
func.apply();
VERSUS 只是简单的括号。
func();
在任何地方都没有看到任何关于此的信息,我知道为什么在传递params时会使用call / apply。
答案 0 :(得分:6)
当您使用func();
调用方法时,方法内的this
变量指向window
对象。
当您使用call(...) / apply(...)时,传递给方法调用的第一个参数在方法内变为this
。如果你没有传递任何参数/传递null或undefined,那么this
将become global object在非严格模式下。
答案 1 :(得分:0)
是的,在某些情况下存在重要区别。例如,处理回调。假设您有一个带有构造函数的类,该类接受callback
参数并将其存储在this.callback
下。稍后,当通过this.callback()
调用此回调时,外来代码突然通过this
获取对您对象的引用。并非总是如此,在这种情况下使用this.callback.call()
更好/更安全。
这样,外来代码将undefined
设为this
,并且不会尝试偶然修改您的对象。正确编写的回调无论如何都不会受到call()
的这种使用的影响,因为它们将提供定义为箭头函数或绑定函数的回调(通过.bind()
)。在这两种情况下,回调都将拥有自己的,适当的设置,不受call()
的影响,因为箭头和绑定函数只是忽略由apply()/call()
设置的值。