【问题标题】:Javascript IIFE anonymous function [duplicate]Javascript IIFE匿名函数[重复]
【发布时间】:2015-02-19 08:56:08
【问题描述】:

我一直试图准确了解 IIFE 在匿名函数方面的工作原理。我了解它们在避免全局变量冲突方面的用途,并且它们创建了自己的本地范围。

我不清楚调用这样的匿名函数时会发生什么。

(function () {
  var myVar = 'foo';
  }
)()

如果立即调用它并且它在全局范围内不可用,那么它在哪里可用?如何访问 myVar?

【问题讨论】:

  • 你无法访问 myVar,IIFE 作为一个受到良好保护的单身人士工作
  • 除非您将其设为window 的属性或上述范围内的其他内容,否则您将无法访问它。
  • 这是否意味着将(窗口)传递给调用括号?
  • @byrdr 不,但你可以,这将有助于缩小。无论哪种情况,您都需要使用window.myVar
  • 是的——这实际上是你编写这样代码的原因之一:保护全局命名空间免受污染,这样你的脚本就不会踩到其他脚本使用的变量,反之亦然。

标签: javascript iife


【解决方案1】:

这种表示法称为模块模式

var myModule = function () {
      var privateVar = "foo";
      function privateMethod() {
       return "bar";

      }

      return {
        publicMethod : function(){
          return 'foo';
        }
      }
}

为了使这个模块与全局范围完全隔离,我们可以在 IIFE 中关闭它

(function (setUp) {
      var privateVar = setUp;
      function privateMethod() {
       return "bar";

      }

      return {
        publicMethod : function(){
          return 'foo';
        }
      }
})(window.setUp);

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 2014-05-23
    • 2013-11-22
    • 1970-01-01
    • 2013-12-18
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    相关资源
    最近更新 更多