新行是 Javascript 中的分隔符吗

Is new line a separator in Javascript

在调试 Web SPA 问题时,我偶然发现了一些我无法在网上找到具体参考的东西:javascript 中函数表达式之间缺少逗号分隔符。详情如下:

这行得通 - 明确的逗号作为分隔符(注意 - 故意在一行上):

var f1 = function() { console.log(1); }, f2 = function() { console.log(2);}

但这似乎不起作用,请在 Chrome 控制台中尝试(再次 - 故意单行):

var f5 = function() { console.log(5); } f6 = function() { console.log(6);} 
VM37860:2 Uncaught SyntaxError: Unexpected identifier
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

那么这个似乎有效 - 注意缺少逗号:

> var f3 = function() { 
   console.log(3); 
  } 
  f4 = function() { 
   console.log(4);
  }
< function f4()
> f4()
  4
< undefined
> f3()
  3
< undefined

我正在寻找关于为什么多行但缺少逗号似乎有效的解释或参考。

后果是我们的源代码中遗漏的逗号滑入构建中导致语法正确的脚本包中出现意外行为(包含丢失的逗号片段的脚本片段与服务器端的许多其他组件捆绑在一起并作为单个脚本标记发送到浏览器)。 IE。 Chrome 和 FF 没有报告语法错误,但脚本行为不正确(这是一个复杂的基于 knockout.js 的 SPA,但似乎是许多同名但作用域不同的函数中的错误函数,被调用;使用的敲除版本是 2.x)。

无论如何 - 如果有人能从纯 Javascript / Chrome 控制台的角度解释控制台行为,我很感兴趣,超出基于淘汰的 SPA 的范围。

Javascript 将在某些换行符处采用分号。啊。所以你的第二个变量是全局变量,而不是 var 的一部分。 http://inimino.org/~inimino/blog/javascript_semicolons

如果不使用逗号,则表示 "a sentence" 在同一行。在另一行中 Javascript 将假设另一个句子。而逗号可以用"a lot of variable".

例如,var f1, f2--> var f1; var f2; </code>var f3 = 10<code> f4 = 20 // 是全局变量。这不是同一行。`