因为可以这样做:
var x = 'foo', y = 'foo';
这也可能吗?
var x, y = 'foo';
我尝试过,但x变得不确定。
我知道这似乎是一个愚蠢或多余的问题,但如果我对某些事情感到好奇,为什么不问?你也可能想知道为什么我需要两个变量等于在范围中的相同的东西。这不是问题的关键。我只是好奇。
答案 0 :(得分:24)
不确定这是否是您所要求的,但如果您的意思是“我可以在一行中为同一个文字分配两个变量而不输入两次文字吗?”然后答案是肯定的:
var x = 10, y = x;
答案 1 :(得分:22)
您需要两个单独的语句才能获得完全相同的语义。
var x, y; x = y = 'foo';
// or
var x = 'foo'; var y = x;
// or
var y; var x = y = 'foo';
其他用户建议的解决方案不等效,因为它不会将var
应用于y
。如果存在全局变量y
,那么它将被覆盖。
// Overwrites global y
var x = y = 'foo';
最好将var
正确应用于局部变量,而不是为了简洁而省略它。
答案 2 :(得分:7)
你可以
var x = y = 'test'; // Edit: No, don't do this
修改强>
我刚刚意识到这会创建/覆盖y
作为全局变量,因为y
不会立即以var
关键字开头。所以基本上,如果它在一个函数中,你会说“局部变量x
等于全局变量y等于......”。因此,您要么污染全局范围,要么为现有的全局y
变量分配新值。不好。
不幸的是,你无法做到
var x = var y = 'test'; // Syntax error
所以,相反,如果你不想污染全局范围(你没有!),你可以做到
var x, y;
x = y = 'test';
答案 3 :(得分:5)
为了使其起作用,您需要单独初始化它们(如第一个示例),或者您需要在单独的语句中设置它们。
// This causes bugs:
var x = y = 'test';
观看:
var y = 3;
function doSomething(){ var x = y = 'test'; }
doSomething();
console.log( y ); // test !?
另一方面:
// this does not
var x,y; x = y = 'test';
观看:
var y = 3;
function doSomething(){ var x,y; x = y = 'test'; }
doSomething();
console.log( y ); // 3 -- all is right with the world.
答案 4 :(得分:5)
以下是我的测试功能。污染功能中当前未注释的行可以满足您的需求。您可以尝试使用jsfiddle here中的其他选项。
var originalXValue = 'ekis';
var originalYValue = 'igriega';
var x = 'ekis';
var y = 'igriega';
function pollute()
{
// Uncomment one of the following lines to see any pollution.
// x = 'ex'; y = 'why'; // both polluted
// var x = 'ex'; y = 'why'; // y was polluted
// var x = y = 'shared-ex'; // y was polluted
var x = 'oneline', y = x; // No pollution
// var x = 'ex', y = 'ex'; // No pollution
document.write('Pollution function running with variables<br/>' +
'x: ' + x + '<br/>y: ' + y + '<br/><br/>');
}
pollute();
if (x !== originalXValue && y !== originalYValue)
{
document.write('both polluted');
}
else if (x !== originalXValue)
{
document.write('x was polluted');
}
else if (y !== originalYValue)
{
document.write('y was polluted');
}
else
{
document.write('No pollution');
}
答案 5 :(得分:4)
请注意,虽然
var x = y = 'test';
是合法的javascript
在严格的上下文中(例如本例):
function asdf() {
'use strict';
var x = y = 5;
return x * y;
}
asdf();
你会得到:
ReferenceError: assignment to undeclared variable y
让它无误地运行
var x, y;
x = y = 5;
答案 6 :(得分:2)
如果要将x显式初始化为undefined并希望限制x的范围,则使用var x,y ='foo'。
function foo() {
var x, y = 'value';
// ...
x = 5;
// ...
}
// Neither x nor y is visible here.
另一方面,如果你说:
function foo() {
var y = 'value';
// ...
x = 5;
// ...
}
// y is not visible here, but x is.
希望这有帮助。
来源:http://www.mredkj.com/tutorials/reference_js_intro_ex.html
答案 7 :(得分:1)
我会避免变得棘手。由于我每个var
只使用一个变量(每行一个语句),所以很容易保持简单:
var x = "hello"
var y = x
很好,简单而且没有愚蠢的问题 - 正如其他答案和评论中所讨论的那样。
快乐的编码。
答案 8 :(得分:1)
我想知道为什么没人发布,但你可以这样做
var x, y = (x = 'foo');
答案 9 :(得分:0)
你做不到
var a = b = "abc";
因为在这种情况下,b将成为全局变量。
您必须意识到声明一个没有var的变量会使其成为全局变量。所以,如果你逐一关注它会很好
var a = "abc";
var b = a;