分号在自我调用功能之前?

时间:2011-09-09 17:17:03

标签: javascript jquery

在JavaScript中使用自调用函数之前使用分号有什么好处。我在几个流行的jQuery插件中看到了这种方法,我很想知道这是否是我不知道的JavaScript中的下一个很棒的东西。先谢谢你,伙计们!

3 个答案:

答案 0 :(得分:157)

如果将两个文件与自调用函数连接在一起,如下所示:

档案A:

(function(){...A...})()

档案B:

(function(){...B...})()

档案A + B:

(function(){...A...})()(function(){...B...})()

你有两个没有分隔符的语句。当您将文件合并在一起然后缩小它们时会发生这种情况。

现在,文件B的作者在前面添加了一个分号:

档案B2:

;(function(){...B2...})()

你会得到一个有效的脚本:

(function(){...A...})();(function(){...B2...})()

答案 1 :(得分:28)

自调用函数被括号括起来,并且在JavaScript中括号被重载为

  1. 将表达式分组以覆盖优先级:(x + y) * z
  2. 功能应用程序:f()
  3. 在函数前面加一个分号可以防止函数在括号与函数应用程序混淆时成为参数。

    考虑

    var x = 42
    
    (function () { ... })()
    

    相同
    var x = 42(function () { ... })()
    

    var x = 42
    
    ;
    
    (function () { ... })()
    

    相同
    var x = 42;
    
    (function () { ... })()
    

答案 2 :(得分:3)

对我来说,半冒号在Internet Explorer 8中触发错误(或至少是IETester所说的),并阻止ui标签正常工作。

错误消息为Invalid character in jquery.all.ui.js Line: 1. Char: 1

我完全偶然发现了分号。 当我从;移除;(function($)时,它似乎没有副作用或功能丧失。 我正在使用Drupal,不知道这是否与此事有关。