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."
要防止y成为全局变量,请使用以下命令:
var x, y = x = 'value';
Run Code Online (Sandbox Code Playgroud)
显然,声明只是从左到右进行评估.