繁体   English   中英

奇怪但工作的var声明语法

[英]Weird but working var declaration syntax

我经常使用这种语法,但我不明白为什么它只是起作用。

var a = 1, b = a + 1;
console.log(b); // 2

如果你声明一个var,在用逗号分割后, b已经看到a被评估的? 这是为什么?

它已被定义为这样。

首先,基本术语的定义:

VariableStatement

var VariableDeclarationList ;

和:

VariableDeclarationList

VariableDeclaration

VariableDeclarationListVariableDeclaration

适用于您的问题的实际定义是这样的:

生产VariableDeclarationListVariableDeclarationListVariableDeclaration的计算方法如下:

  1. 评估VariableDeclarationList

  2. 评估VariableDeclaration

因此,在执行#2时,已经评估了#1,您可以在#2中使用它的任何效果。

这是由于如何在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;

只是因为a在b之前被初始化了。 这个过程从左到右。

这有点违反直觉但只是认为它与此相同:

var a = 1;
var b = a + 1;

与Python之类的其他语言不同,其中多个赋值对先前的值进行操作(使交换变得更容易)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM