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