我在其他代码中看到过不同的做法,但是这样做(blank params) 有什么好处或理由吗?在常规的()函数执行上调用/.apply。
这当然是一个过于简化的例子
var func = function () { /* do whatever */ };
func.call();
func.apply();
vs 只是一个简单的括号。
func();
没有看到任何关于这方面的信息,我知道为什么在传递参数时使用call/apply
当你调用带有func();
的方法时,方法中的this
变量指向window
对象。
当你使用call(…)/apply(…)时,传递给方法调用的第一个参数变成了方法内部的this
。如果你没有传递任何参数/传递null或undefined,那么this
将成为非严格模式下的全局对象。
是的,在某些情况下有重要的区别。例如,处理回调。假设您有一个类,其构造函数接受callback
参数并将其存储在this.callback
下。稍后,当通过this.callback()
调用这个回调时,外部代码突然通过this
获得对对象的引用。这并不总是可取的,在这种情况下使用this.callback.call()
是更好/更安全的。
这样,外部代码将把undefined
作为this
,并且不会试图意外地修改您的对象。正确编写的回调不会受到call()
的影响,因为它们将提供定义为箭头函数或绑定函数的回调(通过.bind()
)。在这两种情况下,回调都有自己的适当this,不受call()
的影响,因为箭头和绑定函数只是忽略由apply()/call()
设置的值。