2010-10-28 26 views
7

He estado leyendo Javascript - The Good Parts y una cosa que Crockford señala es la debilidad de uso de variables globales en Javascript, de tal manera que si su producto se expande de alguna manera , y se basa en una variable 'global' que podría establecerse inadvertidamente.variables globales JavaScript y funciones anónimas autoinvocadas

Eso es todo bien y bien y entiendo los pros/contras de proteger variables, de otras maneras, como cierres también. Sin embargo, yo estaba pensando un poco, y envolviendo código en una función de este modo:

(function() { 
    var x = 'meh'; 
})(); 
(function() { 
    alert(typeof x); // undefined 
})(); 

le da alcance variable, que por lo tanto evita la contaminación cruzada de las variables. Sin embargo, no estoy seguro de si hay un inconveniente evidente en este enfoque y me pregunté si la comunidad tenía alguna aportación, o si estoy pensando demasiado e ignorando el punto principal.

Respuesta

6

que es una manera perfectamente legal de hacer las cosas - de las variables en el interior de su función (siempre y cuando van precedidos de var) son locales a la función. Se llama module pattern, y es muy bien aceptado.

+1

Impresionante. Apreciar el enlace. Me pregunto por qué esto no se menciona realmente en su libro (hasta ahora, es posible que sea posterior, pero tendría sentido tenerlo en la parte que critica las variables globales). Al menos sé que no estoy siendo demasiado analítico por una vez. –

+2

Este es mi día de recortes selectivos, aparentemente, pero esas cosas no se llaman * cierres * en un sentido estricto (en un sentido general de informática, todas las funciones de JavaScript son cierres): esas funciones anónimas autoinvocadas solo serían cierres si se usan fuera del ámbito en el que se definieron (por ejemplo, cuando se conecta una función anónima a un detector de eventos dentro de una función que sale antes de que el oyente se separe). –

+0

@Marcel - gracias, lo he actualizado para usar 'function' en lugar de' closure'. –

0

Para crear aplicaciones con javascript, debe intentar mantener las variables en un ámbito local y cualquier elemento dentro de un espacio de nombres. Es una buena práctica y evita una serie de códigos de daños y comportamientos inesperados.

leer this

se trata de un artículo hablando de las tajas de hacerlo.

0

Convertirlo en una función global no es la respuesta. ¿Por qué no harías esto? Esto mantiene x fuera del espacio de nombres global.

(function() { 
    var x = 'meh'; 
    alert(typeof x); //string 
})(); 
+0

El punto en el ejemplo era quedar indefinido, por lo tanto, aislamiento entre sí. –

Cuestiones relacionadas