.call() / .apply()不带参数VS简单地用()圆括号调用函数



我在其他代码中看到过不同的做法,但是这样做(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()设置的值。

最新更新