1

以下语句按什么顺序运行?运行时是否从右到左执行它?

  length = i = test = output = null;
4

4 回答 4

6

是的,因为赋值表达式本身不是左侧表达式,所以嵌套是

(length = (i = (test = (output = null))));

它从外向内执行,从左到右解决引用(首先获取length变量,然后评估右侧,即获取i变量并评估......)。这意味着output是分配给的第一个变量, then test, theni和 last length:“从右到左”,如果你愿意的话。由于赋值运算符总是产生其正确的操作数,所以所有内容都将被分配相同的(最里面,最右边)值:null.

于 2013-08-28T18:52:40.710 回答
3

运行时是否从右到左执行它?

是的。

foo = {
    set a() {
        console.log('a');
    },
    set b() {
        console.log('b');
    },
    set c() {
        console.log('c');
    },
    set d() {
        console.log('d');
    }
};
foo.a = foo.b = foo.c = foo.d = 'bar';

产生:

d
c
b
a

在控制台中。这个顺序是必要的,因为每个赋值都依赖于前一个赋值的返回值:

foo.a = foo.b = foo.c = foo.d = 'bar';

相当于:

foo.a = (foo.b = (foo.c = (foo.d = 'bar')));

但是它不等同于

foo.d = 'bar';
foo.c = foo.d;
foo.b = foo.c;
foo.a = foo.b;

a = b的返回值为b。如果您选择实现访问器和修改器,请记住这一点尤其重要。

这意味着我之前的示例等效于

foo.d = 'bar';
foo.c = 'bar';
foo.b = 'bar';
foo.a = 'bar';
于 2013-08-28T18:56:41.120 回答
2

是的,它从右到左执行。一切的价值现在都是空的。

于 2013-08-28T18:50:03.630 回答
1

That single line assignment is equivalent to this

output = null;
test = output;
i = test;
length = i;
于 2013-08-28T18:50:55.267 回答