JavaScript空白语法错误
为什么这会导致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这样的工具来警告您缺少分号。