gru*_*ner 8 javascript syntax formatting jquery whitespace
为什么这会导致return语句出现语法错误:
var FOO = (function($)
{
return
{
init: function()
{
}
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
然而,这不是:
var FOO = (function($)
{
return {
init: function()
{
}
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
为什么会有区别?
Sol*_*ogi 21
这不是关于空白,而是关于JavaScript的自动分号插入.
ECMAScript规范说
某些ECMAScript语句(空语句,变量语句,表达式语句,do-while语句,continue语句,break语句,return语句和throw语句)必须以分号结束.此类分号可能始终显式出现在源文本中.然而,为方便起见,在某些情况下可以从源文本中省略这样的分号.这些情况通过说在这些情况下分号自动插入源代码令牌流来描述.
这意味着你的代码
var FOO = (function($)
{
return
{
init: function()
{
}
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
被翻译为
var FOO = (function($)
{
return; // <- JavaScript will insert a semicolon here.
{
init: function()
{
}
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
因此在执行函数后将不确定FOO.
对于你的其他代码,JS不会插入任何分号,它将正常工作 JS将在你的文字对象后插入分号,它应该工作正常.[编辑:kagnax指出的更正]
这意味着您应该始终以分号终止您的语句.让JS引擎插入分号会引入非常微妙的错误,这需要花费数小时来调试.您可以使用像JSLint这样的工具来警告您缺少分号.