我经常使用这种语法,但我不明白它为什么会起作用。
var a = 1, b = a + 1;
console.log(b); // 2
如果你声明了var,在用逗号分隔后,b
已经看到a
评估了吗?那是为什么?
答案 0 :(得分:4)
这是defined。
首先,基本术语的定义:
VariableStatement :
var
VariableDeclarationList;
和
VariableDeclarationList :
VariableDeclaration
VariableDeclarationList , VariableDeclaration
适用于您的问题的实际定义是:
生产 VariableDeclarationList : VariableDeclarationList , VariableDeclaration 评估如下:
评估 VariableDeclarationList 。
- 醇>
评估 VariableDeclaration 。
所以在执行#2时,已经评估了#1,你可以在#2中使用它的任何效果。
答案 1 :(得分:3)
这是由于如何在JavaScript中声明变量。 Javascript中的变量声明分两步进行。首先,初始化在当前作用域中声明的所有变量,并给出未定义的值,并且在以这种方式声明所有变量之后,然后给出它们的实际值。所以你的代码:
var a = 1, b = a + 1;
被翻译为:
var a = undefined;
var b = undefined;
a = 1;
b = a + 1;
这称为吊装。由于您声明的所有变量都悬挂在范围的顶部。这允许你做一些奇怪的事情,如:
var a = b; // b = undefined
var b = 0;
答案 2 :(得分:2)
只是因为a在b之前被初始化了。这个过程从左到右。
答案 3 :(得分:1)
这有点违反直觉但只是认为它与此相同:
var a = 1;
var b = a + 1;
与Python之类的其他语言不同,其中多个赋值对先前的值进行操作(使交换变得更容易)