应如何格式化闭包?

时间:2011-08-02 20:32:52

标签: javascript closures

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

我写过:

(function(){})();

建议使用:

(function(){}());

我很好奇这个特定更改修复了什么错误或问题。我认为,因为JSLint认为它是一个问题,必须成为某人的问题。

扩展表格:

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

-vs -

(
  function (p) {
    ...code...
  }(param) //parameters within the parens
);

2 个答案:

答案 0 :(得分:5)

JSLint尝试修复的特定问题与缺少关闭;有关,这可能导致将函数解释为参数的错误:

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

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

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

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

答案 1 :(得分:0)

根据Crockford在http://www.yuiblog.com/crockford/(不记得哪个视频,但我认为它是开头的),它是纯粹的样式,以帮助使其更容易阅读,并与错误或问题无关。

修改

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