更清晰的方式来分配多个变量

时间:2014-01-05 22:07:50

标签: javascript jquery

有没有更简洁的方法在一行上定义多个javascript变量?

var a = 0,
    b = 0,
    c = 0,
    d = 0,
    blah = "";

我想知道我是否可以这样写:

var a = b = c = d = 0,
    blah = "";

3 个答案:

答案 0 :(得分:4)

你不能这样做:

var a = b = c = d = 0, blah = "";

因为var语法是这样的,它只是在声明的第一个=左侧的符号。你可以这样做:

var a, b, c, d = 0, blah = "";
a = b = c = d;

编辑进一步说明:第一个代码示例不会导致语法错误(“严格”模式除外),但它不会执行它可能执行的操作。变量“b”,“c”和“d”是 not 通过这样的语句声明为局部变量。如果它们是全局变量,那么预先存在的值将被覆盖。否则,它们将被隐式声明为全局变量,而不是局部变量。

无论如何,一次一个地声明和初始化变量并没有什么真的很难看。

答案 1 :(得分:3)

你可以这样做:

var a, b, c, d, blah = "";
a = b = c = d = 0;

第二种方式:

var a = b = c = d = 0,  //Wrong!! don't do it
blah = "";

错误因为它只会将a声明为var而其余部分(b, c, d, e)将是全局变量。可怕的副作用(并且难以察觉)。

但是,我会坚持你展示的经典之作:

var a = 0, 
    b = 0, 
    c = 0, 
    d = 0, 
    blah = "";

因为它更标准;)。

干杯

答案 2 :(得分:3)

第二种方式获取带副作用的代码

试试这个:

//3 assignments in the 'global' scope
var b = 2,
    c = 3,
    d = 4;

(function(){
    var a = b = 5; //a gets declared in the local scope, 
                   //b get's assigned in the global scope
                   // var a = (b = 5), where (b = 5) returns the value 5 itself
    var d = 5;     //d gets declared in the local scope
}());

console.log(d); //4
console.log(b); //5
console.log(c); //3
console.log(a); //ReferenceError, as a is undefined in this scope

尝试仅使用第一个版本以避免收到意外