【问题标题】:Awkward way of executing JavaScript code [duplicate]执行JavaScript代码的尴尬方式[重复]
【发布时间】:2014-02-26 23:42:42
【问题描述】:

在 Google tutorial for implementing Google+ sign-in in Flask application 中,我发现开发者经常使用一种笨拙的方式来执行 JavaScript 代码:

而不是做

var a = foo(bar);

我看到了:

var a = (function() {
  return foo(bar);
})();

以奇怪的方式做这件事的原因是什么?

【问题讨论】:

  • 你能提供直接的例子吗?视情况而定
  • 没有理由在那里使用该语法,并且它不会出现在您链接到的页面上。您能否链接到实际示例以便我们查看上下文?
  • 哦,好的,所以不要留下曾经需要但现在过时的变量的垃圾。
  • @Quentin 教程中的实际代码非常大,因此过于具体,无法包含在问题中。

标签: javascript


【解决方案1】:
var a = (function() {
  return foo(bar);
})();

在这种情况下,这确实是不必要的,但这并没有错,也不会抛出错误。

IIF 有时会使用module pattern

var a = (function() {
  /* some other code in own scope */
  return foo(bar);
})();

在这种情况下,IIF 只是一个module,它在外部导出一些东西。

【讨论】:

    【解决方案2】:

    闭包函数用于封装函数中的一些属性/方法。很像其他语言的私有/公共原则。

    你可以找到更多关于这个话题here under Module Pattern

    【讨论】:

      【解决方案3】:

      这是一个糟糕的例子。考虑以下几点:

      var a = (function(){
          var ret = {};
          ret.test = "123";
          function imPrivate() { /* ... */ }
          ret.public = function() { imPrivate(); }
          return ret;
      })();
      

      a 将包含变量 test 和函数 public,但是您不能访问 imPrivate。这是处理公共变量和私有变量的常用方法;

      请参阅Why is this function wrapped in parentheses, followed by parentheses? 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多