繁体   English   中英

.call()/。apply()与NO参数VS简单地用()括号调用函数

[英].call() / .apply() with NO parameters VS simply calling a function with () parenthesis

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

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

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

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

而不只是简单的括号。

func();

在任何地方都没有看到任何关于此的信息,我知道为什么在传递params时会使用call / apply。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM