新行是Javascript中的分隔符

时间:2015-06-10 16:46:33

标签: javascript google-chrome knockout.js google-chrome-devtools knockout-2.0

在调试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

我正在寻找解释或参考一个为什么多行但缺少逗号似乎工作。

分歧是我们源代码中缺少的逗号滑入构建中导致了其他语法正确的脚本包中的意外行为(包含缺少的逗号片段的脚本片段与服务器端的许多其他组件捆绑在一起并发出作为浏览器的单个脚本标记)。即Chrome和FF没有报告语法错误,但脚本行为不正确(它是一个复杂的基于knockout.js的SPA,但好像有许多具有相同名称,但范围不同的函数的错误函数被调用;使用的淘汰版本是2.x)。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果你不使用逗号,则意味着&#34;句子&#34;在同一条线上。在另一行Javascript将假设另一句话。逗号可以使用&#34;很多变量&#34;。

例如,var f1, f2 - &gt; var f1; var f2; var f3 = 10 f4 = 20 //它是全局变量。它不是同一条线。