Javascript 用call方法显式调用的自执行函数

Javascript 用call方法显式调用的自执行函数,javascript,Javascript,我见过大量javascript代码使用自执行函数,如: (function(){ // ... code here })(); 但偶尔,我会看到人们这样做: (function(){ // ... code here }).call(this); 这两种形式在功能上有什么不同吗?如果是,是什么? 野生第二种形式的一个示例:第二种形式将此的值传递到IIFE中,因此IIFE中的此将具有与IIFE外部相同的值。在许多情况下,这并没有什么区别,但如果IIFE在某个范围内,this被设

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

(function(){
    // ... code here
})();
但偶尔,我会看到人们这样做:

(function(){
    // ... code here
}).call(this);
这两种形式在功能上有什么不同吗?如果是,是什么?


野生第二种形式的一个示例:

第二种形式将
的值传递到IIFE中,因此IIFE中的
将具有与IIFE外部相同的值。在许多情况下,这并没有什么区别,但如果IIFE在某个范围内,
this
被设置为某个有意义的值,那么第二种形式将在IIFE内保留
this
的值

如果外部作用域中的
是全局对象,并且您没有运行严格模式,则第二个表单不会真正改变任何内容,因为
仍将是IIFE中的全局对象

但是,如果
在严格模式下是任何有意义的值,或者在非严格模式下是除全局对象以外的任何有意义的值,则第二种形式将
的值扩展到附件中


在您所指的示例中,我猜第二种形式只是被用作一种常见的设计模式,而不是因为在这种特殊情况下确实有理由这样做。事实上,如果你看一下你所指的代码示例,它甚至没有在生命的顶层使用
this
的值,因此在特定示例中它肯定是多余的。

在什么情况下,这不是设置为“有意义的值”@RobG-在严格模式下,
this
通常是
未定义的
(例如,在任何正常函数调用中)。