应如何格式化闭包?

zzz*_*Bov 6 javascript closures

我通过JSLint运行了一个脚本,它选择了一个带括号放置的特定问题.

我写过:

(function(){})();
Run Code Online (Sandbox Code Playgroud)

有人建议使用:

(function(){}());
Run Code Online (Sandbox Code Playgroud)

我很好奇这个特定的变化修复了什么错误或问题.我认为,因为JSLint选择了它作为一个问题,所以必须有人的问题.

扩展形式:

(
  function (p) {
    ...code...
  }
)(param); //parameters after the parens
Run Code Online (Sandbox Code Playgroud)

航班吗

(
  function (p) {
    ...code...
  }(param) //parameters within the parens
);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ahn 5

JSLint试图修复的具体问题与缺少关闭有关;,这可能导致函数被解释为参数的错误:

(function A( arg ){
    // stuff
})

(function B(){
   ...
});
Run Code Online (Sandbox Code Playgroud)

是完全有效的,B传递给A作为arg.然而,这通常不是预期的情况,因为这些通常意味着自动执行并且()忘记了尾随.建议的语法消除了您可能意外忘记按预期执行功能的任何混淆.

对于它的价值,我几乎总是使用第一种语法; 习惯.