好吧,我知道什么是FunctionDeclaration
和FunctionExpression
之间的差异。 @CMS做了一个解释的great job。直到最近,我以前用的是相同的语法创建lambda表达式和命名空间以下Douglas Crockford's例如:的JSLint抱怨函数表达式语法命名空间
(function() {
"use strict";
}());
他所持该convention如下:
当一个功能就是要立即调用,整个调用表达式应该包装在parens中,以便明确正在生成的值是函数的结果,而不是函数本身。
该语法非常适用于lambda表达式,因为它们返回一个值。但是,名称空间不返回值。因此,我现在更喜欢使用下面的语法命名空间,而不是(从JavaScript Garden拍摄):
(function() {
"use strict";
})();
使用这种语法是作为背后的基本原理如下:
(// evaluate the function inside the paranthesis
function() {}
) // and return the function object
() // call the result of the evaluation
使用这种语法对于命名空间对我更有意义,因为:此语法分隔了命名空间和调用;并且Douglas Crockford's语法期望该函数返回一个值。
但是,当我通过JSLint传递此语法时,出现错误,指出“Move the invocation into the parens that contain the function.
”。我不明白为什么它会抱怨这个语法。这是一个广泛使用和接受的语法。
我打算通知Douglas Crockford关于这个问题。但是,在我这样做之前,我会感谢您提供的任何反馈。也许最好是坚持自己的语法?请解释你的观点。
它抱怨的语法,因为这是克罗克福德先生的意见,它应该。这就是JSLint的全部内容:机器人封装了Crock对JavaScript编码风格的看法。 – Pointy
事实上,当JSLint强加给每个人的首选编码风格时,这真的很烦人。我经常使用JSLint,并且很难看到我完美的语义良好的代码生成错误。 –
对于不想遵循Crockfords标准的人来说[jsHint](http://www.jshint.com),他不会去改变他们,因为他花了很多时间来确定JavaScript的团队开发的最佳实践。 – JaredMcAteer