Por favor, aléjese de ese patrón de asignación, incluso si desea que todas las variables apunten al mismo objeto.
De hecho, sólo el primero será un declaración de variables, el resto son sólo las asignaciones a posiblemente identificadores declarados!
Asignación de un valor a un identificador no declarado (aka asignación no declarado) Se desaconseja porque, si el identificador no se encuentra en la cadena de ámbito, se creará una variable global. Por ejemplo:
function test() {
// We intend these to be local variables of 'test'.
var foo = bar = baz = xxx = 5;
typeof foo; // "number", while inside 'test'.
}
test();
// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined", As desired, but,
typeof bar; // "number", BAD!, leaked to the global scope.
typeof baz; // "number"
typeof xxx; // "number"
Además, el Modo estricto quinto ECMAScript, no se permite este tipo de tareas. En el modo estricto, una asignación realizada a un identificador no declarado causará una excepción TypeError
, para evitar los globales implícitos.
Por el contrario, aquí es lo que vemos si está escrita correctamente:
function test() {
// We correctly declare these to be local variables inside 'test'.
var foo, bar, baz, xxx;
foo = bar = baz = xxx = 5;
}
test();
// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined"
typeof bar; // "undefined"
typeof baz; // "undefined"
typeof xxx; // "undefined"
bonusPoint para no usar 'new Array()' – DanMan
que estaba teniendo problemas, como se esperaba. Gracias por la explicación! – FFish
punto de bonificación para demostrar cómo funciona;) – jcolebrand