在javascript中设置1行中的多个变量是否有效?(var x = y ='value';)

ano*_*one 31 javascript variables

这在php中有效:

$x=$y='value';
Run Code Online (Sandbox Code Playgroud)

这将在esscence中将$ x和$ y设置为'value'.

这在javascript中有效吗?

var x=y='value';
Run Code Online (Sandbox Code Playgroud)

我已经在chrome控制台中对它进行了测试,它按预期工作,但只是想在开始使用之前仔细检查.

use*_*064 67

它只有var y在先前定义的情况下才有效,否则y将是全局的.

在这种情况下,你最好这样做:

var x, y;
x = y = 'value';
Run Code Online (Sandbox Code Playgroud)

作业链接

另一个创建隐含全局变量的反模式是将赋值链作为var声明的一部分.在下面的代码片段中,a是本地的但是b变成了全局,这可能不是你想要做的:

// antipattern, do not use
function foo() {
   var a = b = 0;
   // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您想知道为什么会发生这种情况,那是因为从右到左的评估.首先,b = 0评估表达式,在这种情况下,不声明b.此表达式的返回值是0,并且它被赋值给使用声明的新局部变量var a.换句话说,就好像你输入了:

var a = (b = 0);
Run Code Online (Sandbox Code Playgroud)

如果您已经声明了变量,则链接赋值很好,并且不会创建 意外的全局变量.例:

function foo() {
   var a, b;
   // ...
   a = b = 0; // both local
}
Run Code Online (Sandbox Code Playgroud)

"JavaScript模式,Stoyan Stefanov(O'Reilly).版权所有2010 Yahoo!,Inc.,9780596806750."


Dyk*_*kam 7

要防止y成为全局变量,请使用以下命令:

var x, y = x = 'value';
Run Code Online (Sandbox Code Playgroud)

显然,声明只是从左到右进行评估.

  • `var x,y,z = y = x ='value';`无论出于何种原因;) (3认同)
  • 嗯,这不是最可爱的事吗? (2认同)

Ste*_* Lu 7

我很确定最易读的形式是尚未提出的形式:

let x = 0, y = 0
Run Code Online (Sandbox Code Playgroud)