为什么这导致了return语句语法错误:
var FOO = (function($)
{
return
{
init: function()
{
}
}
})(jQuery);
然而,这并不:
var FOO = (function($)
{
return {
init: function()
{
}
}
})(jQuery);
为什么有区别吗?
这不是空白,它是关于由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 ,这将提醒你缺少分号。