Javascript的引用顺序

时间:2013-08-28 18:48:37

标签: javascript

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

  length = i = test = output = null;

4 个答案:

答案 0 :(得分:6)

是的,因为assignment expression本身不是lefthand-side expression,所以嵌套是

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

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

答案 1 :(得分: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';

答案 2 :(得分:2)

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

答案 3 :(得分:1)

该单行分配等同于此

output = null;
test = output;
i = test;
length = i;