javascript - Javascript 中的换行符是分隔符吗

标签 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

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

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

无论如何 - 我很感兴趣是否有人可以在基于 knockout 的 SPA 范围之外从纯 Javascript/Chrome 控制台的 Angular 解释控制台行为。

最佳答案

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

关于javascript - Javascript 中的换行符是分隔符吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30762484/

相关文章:

javascript - Backbone 重构模型

php - 如何使用 php echo 包含一个 javascript 文件?

javascript - 除了 Angular-Material md-checkboxes 之外,默认的浏览器复选框也出现了

javascript - 在 Chrome 中查看传递给 JavaScript 函数的参数

html - CSS 在打印中创建整页无边距纯色背景

javascript - 带有 jquery 事件的 knockout 列表

javascript - node.js:包括外部 grunt 配置

knockout.js - anchor 标记上的 knockout 绑定(bind)

javascript - 显示带有 knockout 功能的原始 api 数据

javascript - ERB/Coffee Rails 中图像 url 的未定义局部变量或方法 `image'