【问题标题】:IIFE invocation in JavaScriptJavaScript 中的 IIFE 调用
【发布时间】:2013-05-31 23:33:40
【问题描述】:

我见过的两种使用 IIFE 的方法(我知道还有更多):

(function(){
    console.log(this);
}).call(this);

(function(){
    console.log(this);
})();

有什么理由在第一个上使用.call(this) 吗? (); 不会在函数中产生相同的上下文吗?

【问题讨论】:

标签: javascript


【解决方案1】:

这取决于代码的执行位置。

.call(this)this 显式设置为您传递给.call 的对象。仅使用(); 会将this 设置为window(或在严格模式下设置为undefined)。

如果代码在全局范围内执行,它将是相同的。如果不是,那么如果this 不引用window(或者是undefined),您将得到不同的结果。

例子:

var obj = {
   foo: function() {
       (function(){
           console.log(this); // this === obj
       }).call(this); // this === obj

       (function(){
           console.log(this); // this === window
       })();
   }
};

obj.foo();

More information about this on MDN

【讨论】:

  • Felix 据我所知,IIFE 总是在非严格模式下引用窗口对象,在严格模式下未定义,所以...
  • IIFE 是一个正常的函数。您可以使用.call.apply 显式设置this
猜你喜欢
  • 2016-12-24
  • 2013-01-14
  • 2014-03-13
  • 2016-01-07
  • 2017-08-30
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
相关资源
最近更新 更多