以下语句按什么顺序运行?运行时是否从右到左执行它?
length = i = test = output = null;
运行时是否从右到左执行它?
是的。
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';
是的,它从右到左执行。一切的价值现在都是空的。
That single line assignment is equivalent to this
output = null;
test = output;
i = test;
length = i;