【发布时间】:2015-06-10 16:46:33
【问题描述】:
在调试 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
我正在寻找关于为什么多行但缺少逗号似乎有效的解释或参考。
后果是我们的源代码中丢失的逗号滑入构建中导致了其他语法正确的脚本包中的意外行为(包含缺少逗号的脚本 sn-p 与服务器端的许多其他组件捆绑在一起并作为单个脚本标签发送到浏览器)。 IE。 Chrome 和 FF 没有报告语法错误,但脚本行为不正确(这是一个复杂的基于 knockout.js 的 SPA,但似乎调用了许多同名但范围不同的函数中的错误函数;版本使用的淘汰赛是 2.x)。
无论如何 - 如果有人可以从纯 Javascript/Chrome 控制台的角度解释控制台行为,我很感兴趣,这超出了基于剔除的 SPA 的范围。
【问题讨论】:
标签: javascript google-chrome knockout.js google-chrome-devtools knockout-2.0