引用的Javascript顺序

Javascript order of referencing

本文关键字:顺序 Javascript 引用      更新时间:2023-09-26

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

  length = i = test = output = null;

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

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

它是从外向内执行的,从左到右求解引用(首先获取length变量,然后评估右侧,即获取i变量并评估…)。这意味着output是被分配的第一个变量,然后是test,然后是i,最后是length:如果你愿意,"从右到左"。由于赋值运算符总是产生其右操作数,因此所有操作数都将被分配相同的(最里面、最右边)值: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';

是的,它从右到左执行。所有内容的值现在都为空。

单行分配等效于此

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