JavaScript的空白语法错误(JavaScript Whitespace Syntax Err

2019-08-17 17:49发布

为什么这导致了return语句语法错误:

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

        }
    }
})(jQuery);

然而,这并不:

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

        }
    }
})(jQuery);

为什么有区别吗?

Answer 1:

这不是空白,它是关于由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 ,这将提醒你缺少分号。



文章来源: JavaScript Whitespace Syntax Error