gpt4 book ai didi

JavaScript 操作顺序

转载 作者:行者123 更新时间:2023-11-30 08:03:22 24 4
gpt4 key购买 nike

在同一指令中实例化两个变量时:

var foo = 1,
bar = foo + 1;

在 V8 中,这会产生 foo == 1bar == 2

var bar = foo + 1,
foo = 1;

这会产生 foo == 1bar == NaN

执行操作的顺序是否有保证?还是分别声明 foobar 更安全?

var foo = 1;
var bar = foo + 1;

甚至

var foo, bar;
foo = 1;
bar = foo + 1;

最佳答案

正如您正确注意到的那样,变量声明表达式将从左到右计算。赋值表达式的左侧将首先求值,然后赋值表达式的右侧求值,然后再赋值。

在第二种情况下,你得到了 NaN,因为 variable hoisting .当 JavaScript 看到

bar = foo + 1,

它将知道 foo 已在当前上下文中定义,但尚未分配值。因此,默认情况下,它对 foo 使用 undefined

console.log(undefined + 1);
# NaN

这就是为什么 NaN 被分配给 bar 的原因。

根据ECMA 5.1 Standard Docs' Variable Statement section , 变量声明将被这样计算

VariableStatement:
var VariableDeclarationList ;

VariableDeclarationList :
VariableDeclaration
VariableDeclarationList , VariableDeclaration*

这里,生产会这样评价

The production VariableDeclarationList : VariableDeclarationList , VariableDeclaration is evaluated as follows:

  1. Evaluate VariableDeclarationList.
  2. Evaluate VariableDeclaration.

因此,应该首先评估最左边的赋值表达式,最后才是最右边的赋值表达式。因此,您看到的行为是预期的行为。

关于JavaScript 操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22634987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com