gpt4 book ai didi

javascript - 使用 call 方法显式调用的自执行函数

转载 作者:行者123 更新时间:2023-12-02 16:42:51 25 4
gpt4 key购买 nike

我见过大量的 javascript 代码使用自执行函数,例如:

(function(){
// ... code here
})();

但偶尔,我看到人们会这样做:

(function(){
// ... code here
}).call(this);

这两种形式之间有功能上的区别吗?如果是的话,那是什么?

第二种形式的野外示例:https://github.com/shawnmclean/Idle.js/blob/master/build/idle.js#L160

最佳答案

第二种形式将 this 的值传递到 IIFE,这样 IIFE 内部的 this 的值将与 IIFE 外部的值相同。在很多情况下,这并没有什么区别,但如果 IIFE 位于 this 设置为某个有意义的值的范围内,则第二种形式将保留 this< 的值 IIFE 内。

如果外部作用域中的 this 是全局对象,并且您没有运行严格模式,那么第二种形式不会真正改变任何内容,因为 this 仍然会是IIFE 内的全局对象。

但是,如果 this 在严格模式下是任何有意义的值,或者在非严格模式下是除全局对象之外的任何有意义的值,则第二种形式将扩展 this< 的值 进入外壳。

在您指出的示例中,我的猜测是第二种形式只是用作通用设计模式,而不是因为在特定情况下确实有理由这样做。事实上,如果您查看您指向的代码示例,它甚至没有在 IIFE 的顶层使用 this 的值,因此在该特定示例中它绝对是多余的。

关于javascript - 使用 call 方法显式调用的自执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com