gpt4 book ai didi

javascript - foo.x 的输出是什么

转载 作者:行者123 更新时间:2023-11-29 20:38:56 25 4
gpt4 key购买 nike

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

foo.x 的输出是什么。我的想法是从右到左评价所以它等于

foo = {n:2};
foo.x = foo

就是这样

{
n: 1
x: {n: 2}
}

但不是,它是undefined?我很困惑,正在寻找解释。

最佳答案

这是预期的行为。查看specification :

Simple Assignment ( = )

The production AssignmentExpression : LeftHandSideExpression = AssignmentExpression is evaluated as follows:

  1. Let lref be the result of evaluating LeftHandSideExpression.
  2. Let rref be the result of evaluating AssignmentExpression.
  3. Let rval be GetValue(rref).
  4. Throw a SyntaxError exception if (...unimportant)
  5. Call PutValue(lref, rval).
  6. Return rval.

简而言之,当解释器看到x = <expression> , 或 x.prop = <expression> ,它首先确定要分配给什么 - 即 LeftHandSideExpression。然后,在对右侧(AssignmentExpression)求值后,它将值分配给最初标识为 LeftHandSideExpression 的值。所以,与

foo.x = foo = {n: 2};

foo.x改变原始 foo对象,而不是重新分配的 foo = {n: 2}对象,所以在 foo.x = foo = {n: 2} 之后线,foo指的是新的{n: 2} ,它永远不会发生突变。

你可以看到如何bar , 它引用内存中与原始 foo 相同的对象, 发生变异:

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

console.log(bar);

关于javascript - foo.x 的输出是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56104521/

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