variable scripts from another javascript variables declare

scripts - call variable from another file javascript



Declarar mĂșltiples variables en JavaScript (4)

Quiero declarar múltiples variables en una función:

function foo() { var src_arr = new Array(); var caption_arr = new Array(); var fav_arr = new Array(); var hidden_arr = new Array(); }

¿Es esta la forma correcta de hacer esto?

var src_arr = caption_arr = fav_arr = hidden_arr = new Array();


No, su segunda declaración creará cuatro referencias a la misma matriz. Usted quiere:

var src_arr = [], caption_arr = [], fav_arr = [], hidden_arr = [];


Por favor, manténgase alejado de ese patrón de asignación, incluso si desea que todas las variables apunten al mismo objeto.

De hecho, solo el primero será una declaración de variables , el resto son solo asignaciones a posibles identificadores no declarados .

No se recomienda asignar un valor a un identificador no declarado (es decir, asignación no declarada ) 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 ECMAScript 5th 5th Strict Mode no permite este tipo de asignaciones. Bajo 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, esto es lo que vemos si está escrito 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"


Sí, lo es si desea que todos apunten al mismo objeto en la memoria , pero lo más probable es que quiera que sean matrices individuales para que, si uno muta, los otros no se vean afectados.

Si no quiere que todos apunten al mismo objeto, haga

var one = [], two = [];

El [] es un literal abreviado para crear una matriz.

Aquí hay un registro de la consola que indica la diferencia:

>> one = two = []; [] >> one.push(1) 1 >> one [1] >> two [1] >> one = [], two = []; [] >> one.push(1) 1 >> one [1] >> two []

En la primera parte, definí one y two para señalar el mismo objeto / matriz en la memoria. Si utilizo el método .push , .push 1 a la matriz, por lo que tanto one como two tienen 1 dentro. En el segundo porque definí matrices únicas por variable, así que cuando presioné a una, dos no se vieron afectadas.


Todas esas variables se referirán a un objeto Array.