Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript引用顺序_Javascript - Fatal编程技术网

Javascript引用顺序

Javascript引用顺序,javascript,Javascript,以下语句的运行顺序是什么?运行时是否从右向左执行它 length = i = test = output = null; 是的,它从右向左执行。 所有内容的值现在都为空。是的,它从右向左执行。 现在,所有内容的值都为空。单行赋值与此等效 output = null; test = output; i = test; length = i; 该单行赋值与此等效 output = null; test = output; i = test; length = i; 是的,因为a本身不是a,

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

  length = i = test = output = null;

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

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

单行赋值与此等效

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

该单行赋值与此等效

output = null;
test = output;
i = test;
length = i;
是的,因为a本身不是a,所以嵌套是

(length = (i = (test = (output = null))));
从外到内执行,从左到右求解引用(首先获取
length
变量,然后计算右侧,即获取
i
变量并计算…)。这意味着
output
是分配给的第一个变量,然后是
test
,然后是
i
,最后一个
length
:“从右到左”。由于赋值运算符总是产生其右操作数,因此所有操作数都将被赋值为相同的(最里面、最右边的)值:
null
是,因为an本身不是a,所以嵌套是

(length = (i = (test = (output = null))));
从外到内执行,从左到右求解引用(首先获取
length
变量,然后计算右侧,即获取
i
变量并计算…)。这意味着
output
是分配给的第一个变量,然后是
test
,然后是
i
,最后一个
length
:“从右到左”。由于赋值运算符总是产生其右操作数,因此所有操作数都将被赋值为相同的(最里面、最右边的)值:
null

运行时是否从右向左执行它

  length = i = test = output = null;

产生:

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;
foo.d = 'bar';
foo.c = 'bar';
foo.b = 'bar';
foo.a = 'bar';
a=b
的返回值为
b
。如果您选择实现访问器和变异器,请记住这一点尤其重要

这意味着我前面的示例相当于

foo.d = 'bar';
foo.c = foo.d;
foo.b = foo.c;
foo.a = foo.b;
foo.d = 'bar';
foo.c = 'bar';
foo.b = 'bar';
foo.a = 'bar';
运行时是否从右向左执行它

  length = i = test = output = null;

产生:

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;
foo.d = 'bar';
foo.c = 'bar';
foo.b = 'bar';
foo.a = 'bar';
a=b
的返回值为
b
。如果您选择实现访问器和变异器,请记住这一点尤其重要

这意味着我前面的示例相当于

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

好的,但这如何回答这个问题呢?@j08691:我希望这个多行脚本能更清楚地说明执行的顺序……这怎么不能回答这个问题呢?你们这些人怎么了?我认为这种顺序等价会使执行顺序从右到左更加清晰。不,这是不正确的。赋值的返回值就是被赋值的值。这在处理访问器和变异器时尤其重要。好吧,但这如何回答这个问题?@j08691:我希望这个多行脚本能更清楚地说明执行顺序……这怎么不能回答这个问题?你们这些人怎么了?我认为这种顺序等价会使执行顺序从右到左更加清晰。不,这是不正确的。赋值的返回值就是被赋值的值。在处理访问器和变异器时,这一点尤为重要。您将如何测试它的执行顺序?(或者这是一个非常愚蠢的问题;对不起,这是一个漫长的白天(和夜晚)…)没有真正的方法“测试”它们执行的顺序。您可以打开一个javascript控制台(可能现在在浏览器中点击Ctrl/Cmd+Shift+I)并粘贴上面的代码。然后当你测试每个变量的值时,你会发现它们都是空的。有趣的是,因为只有一个操作符(“=”),而且它是从右到左工作的,所以唯一可行的方法是从右到左,否则,所有的东西都会有一个长度值,包括null。。。等等,什么?这是我的假设,但我假设我肯定遗漏了一些(也许)明显的东西…你将如何测试它的执行顺序?(或者这是一个非常愚蠢的问题;对不起,这是一个漫长的白天(和夜晚)…)没有真正的方法“测试”它们执行的顺序。您可以打开一个javascript控制台(可能现在在浏览器中点击Ctrl/Cmd+Shift+I)并粘贴上面的代码。然后当你测试每个变量的值时,你会发现它们都是空的。有趣的是,因为只有一个操作符(“=”),而且它是从右到左工作的,所以唯一可行的方法是从右到左,否则,所有的东西都会有一个长度值,包括null。。。等等,什么?这是我的假设,但我认为我肯定错过了一些(也许)明显的东西…这是正确的答案。更好的是,你已经链接到规范。这是正确的答案。更好的是,你已经链接到规范。