JavaScript空白语法错误

时间:2009-10-11 05:33:24

标签: javascript jquery syntax formatting whitespace

为什么会导致return语句出现语法错误:

var FOO = (function($)
{
    return
    {      
        init: function()
        {

        }
    }
})(jQuery);

然而这不是:

var FOO = (function($)
{
    return {      
        init: function()
        {

        }
    }
})(jQuery);

为什么会有区别?

1 个答案:

答案 0 :(得分:21)

这不是关于空白,而是关于JavaScript自动分号插入。

ECMAScript规范说

  

某些ECMAScript语句(空   声明,变量声明,   表达式声明,do-while   声明,继续声明,休息   声明,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之类的工具来警告您缺少分号。