【问题标题】:What is the difference between running this code in an immediate function and not?在立即函数中运行此代码与不运行此代码有什么区别?
【发布时间】:2011-10-14 12:48:50
【问题描述】:

我在 javascript 文件中经常看到这种模式:

(function ($) 
{
   //Perform operation X
}(jQuery));

将上述代码放在 js 文件中与以下有区别吗:

function myFunc($) 
{
   //Perform operation X
}
myFunc(jQuery);

还是更简洁一些?

【问题讨论】:

  • 我强烈推荐 jslint.com 学习“标准”JS 编码约定。
  • 是的,我最近了解了它。看起来很酷。我的 JS 知识空白正在慢慢填补:)
  • 看到 JSLint 撕开你的代码并告诉你这一切都是错误的……但坚持下去 :)

标签: javascript


【解决方案1】:

您的第二个 sn-p 定义了一个公共符号 myFunc。如果其他人将该符号用于库,您将覆盖它并可能破坏其功能。第一个 sn-p 没有名字,因此更安全。

【讨论】:

    【解决方案2】:

    前者相对于后者的唯一优势是您不会使用变量名 (myFunc) 污染范围。

    即在第二个示例中,如果您在同一范围内已经有一个名为 myFunc 的变量,则其值将被函数覆盖,而在第一个示例中,情况并非如此。

    此外,第二个示例显然允许您多次调用myFunc,而第一个示例只允许调用一次。

    【讨论】:

      【解决方案3】:

      首先,我认为你的第一个代码 sn-p 应该是:

      (function ($) 
      {
         //Perform operation X
      })(jQuery);
      

      据我所知,这两个代码之间没有区别,除了第二个代码创建函数,将其存储在全局变量中然后调用它,第一个代码是否创建匿名函数并正确调用它离开。

      【讨论】:

      • () 可以通过任何一种方式完成。 JSLint 更喜欢末尾的括号,这就是我这样做的原因。
      • 你是对的,这个线程解释了更多关于这个主题:stackoverflow.com/questions/3783007/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      相关资源
      最近更新 更多