【问题标题】:Is it guaranteed which variable will get initialized first if we use comma in JavaScript?如果我们在 JavaScript 中使用逗号,是否保证首先初始化哪个变量?
【发布时间】:2019-03-15 08:41:29
【问题描述】:

如果我们在 JavaScript 中使用逗号,是否保证首先初始化哪个变量?

例如,如果我有以下代码:

var a = function() {return 2;} , b = a();

是否保证a的初始化会先于b的初始化?

我知道更好的做法是每次初始化变量时都使用var 关键字。但我仍然对我的问题的答案感兴趣,因为我无法在互联网上找到 JavaScript 的答案。

正如Trevor Dixon 所指出的,我们可以证明 JavaScript 中的逗号运算符和列表初始化是两个不同的东西。

b = 2, a = 2; console.log(window.a, window.b); //outputs 2 2
var b = 2, a = 2; console.log(window.a, window.b); //outputs undefined undefined

谢谢。

【问题讨论】:

  • @Saraband,谢谢。您的评论似乎与我正在寻找的内容非常接近。我将更新我的问题以指定我不清楚的部分。
  • 我相信,如果你足够仔细地研究规范 (ecma-international.org/ecma-262/9.0/…)(我还没有做过——很难阅读规范),你会发现你看到的行为(从左到 -正确的评估)被编入规范中。

标签: javascript initialization sequence var comma


【解决方案1】:

我在上面错误地删除了我的答案;但是,是的,the comma operator first evaluates the left expression and the right one after that

编辑:似乎使用,声明多个变量与逗号运算符无关

【讨论】:

  • 我不认为初始化列表中的逗号是逗号运算符。
  • 嗯...请您输入一个初始化变量的表达式示例吗?因为据我了解,b = a() 表达式(在逗号后面)不是初始化,而是在 window 对象上创建属性。
  • 我不确定,但这个截图似乎有效:let a = 5, b = a + 5; console.log(b); // 10
  • @Saraband,它可能会工作数次甚至数百万次,但在得到文档保证之前,依赖它是不安全的。我会支持你回答。谢谢。
  • (function() { var a = 1, b = 2; })(); console.log(window.a, window.b); b 不是 window 的属性。确实是局部变量初始化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
相关资源
最近更新 更多