Javascript 闭包应该如何格式化?

Javascript 闭包应该如何格式化?,javascript,closures,Javascript,Closures,我通过JSLint运行了一个脚本,它发现了一个带有括号的特殊问题 我曾写道: (function(){})(); 建议使用: (function(){}()); 我很好奇这个特殊的更改修复了哪些bug或问题。我认为,因为JSLint把它作为一个问题,所以肯定有人会有问题 扩展形式: ( function (p) { ...code... } )(param); //parameters after the parens -vs- 根据Crockford on(不记得是哪一个

我通过JSLint运行了一个脚本,它发现了一个带有括号的特殊问题

我曾写道:

(function(){})();
建议使用:

(function(){}());
我很好奇这个特殊的更改修复了哪些bug或问题。我认为,因为JSLint把它作为一个问题,所以肯定有人会有问题

扩展形式:

(
  function (p) {
    ...code...
  }
)(param); //parameters after the parens
-vs-

根据Crockford on(不记得是哪一个视频,但我认为这是一个开始)的说法,这是一个纯粹的风格设计,有助于使它更易于阅读,与bug或问题无关

编辑:


我认为这是在第三幕:功能的终极

中,JSLint试图解决的具体问题与缺少关闭
有关这可能导致函数被解释为参数时出现错误:

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

(function B(){
   ...
});
是完全有效的,
B
作为
arg
传递给
A
。但是,这通常不是预期的情况,因为通常这些都是自动执行的,并且尾部的
()
被忘记了。建议的语法消除了您可能意外忘记按预期执行函数的任何混淆


值得一提的是,我几乎总是使用第一种语法;习惯。

@zzzzBov哇,你显然没有读过SLaks链接的答案的第一句话。它包含了两个语法之间差异的一个非常详细的分解,准确地回答了您的问题。
(function A( arg ){
    // stuff
})

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