![](/img/trans.png)
[英]How to pass parameters when calling a function without the parenthesis [Javascript]
[英].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()
会更好/更安全。
这样一来,国外的代码就会变得undefined
为this
并不会试图通过意外修改你的对象。 并且正确编写的回调不会受到call()
的这种使用的影响,因为它们将提供定义为箭头函数或绑定函数的回调(通过.bind()
)。 在这两种情况下,回调都有自己的,正确的,不受call()
,因为箭头和绑定函数只是忽略由apply()/call()
设置的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.