0

在调试web SPA问题时,我偶然发现了一些我在网上找不到具体引用的东西:在javascript中的函数表达式之间缺少逗号分隔符。以下是详细信息:新行是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)。

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

回答

0

如果不使用逗号,则表示同一行中的“一个句子”。在另一行中,Javascript将假设另一个句子。逗号可以用“很多变量”。

例如,var f1, f2 - >var f1; var f2; 变种F3 = 10 F4 = 20 //它是全局变量。它不是同一条线。“