¿Qué significa que el espacio de nombres global estaría contaminado?
Realmente no entiendo lo que significa contaminar el espacio de nombres global.
javascript
theJava
fuente
fuente
Respuestas:
Nota rápida sobre la recolección de basura
A medida que las variables pierden alcance, serán elegibles para la recolección de basura. Si tienen un alcance global, no serán elegibles para la recopilación hasta que el espacio de nombres global pierda el alcance.
Aquí hay un ejemplo:
Agregar esto a su espacio de nombres global (al menos para mí) debería generar 10,000 kb de uso de memoria (win7 firefox) que no se recopilarán. Otros navegadores pueden manejar esto de manera diferente.
Considerando que tener ese mismo código en un alcance que sale del alcance como este:
Permitirá
arra
perder alcance después de que se ejecute el cierre y será elegible para la recolección de basura.El espacio de nombres global es tu amigo
A pesar de las muchas afirmaciones contra el uso del espacio de nombres global, es su amigo. Y como buen amigo, no debes abusar de tu relación.
Sé gentil
No abuse (generalmente denominado "contaminar") el espacio de nombres global. Y lo que quiero decir con no abusar del espacio de nombres global es: no crear múltiples variables globales. Este es un mal ejemplo de cómo usar el espacio de nombres global.
Esto creará 11 variables globales que posiblemente podrían sobrescribirse o malinterpretarse en algún lugar.
Sea ingenioso
Un enfoque más ingenioso, que no contamina el espacio de nombres global, sería envolver todo esto en el patrón del módulo y solo usar una variable global mientras se exponen múltiples variables.
Aquí hay un ejemplo: (Tenga en cuenta que esto es simple y no hay manejo de errores)
fuente
Calculate.prototype.Slope()
fuera del alcance? ¡Sería muy perfecto entender otro concepto cercano a esta problemática!En JavaScript, las declaraciones fuera de una función están en el ámbito global. Considere este pequeño ejemplo:
En el ejemplo anterior,
x
se declara en el ámbito global. Cualquier ámbito secundario, como el creado por laexample
función, hereda efectivamente las cosas declaradas en cualquier ámbito principal (en este caso, es solo el ámbito global).Cualquier ámbito secundario que vuelva a declarar una variable declarada en el ámbito global sombreará la variable global, lo que podría causar errores no deseados y difíciles de rastrear:
Por lo general, las variables globales no se recomiendan debido a la posibilidad de causar problemas como este. Si no usáramos la
var
declaración dentro de laexample
función, accidentalmente habríamos sobrescrito el valor dex
en el alcance global:Si desea leer más y comprenderlo correctamente, le sugiero que revise la especificación ECMAScript . Puede que no sea la más emocionante de las lecturas, pero será de gran ayuda.
fuente
Cuando declaras variables globales, funciones, etc., ellas, ehm, van al espacio de nombres global. Aparte de los problemas de rendimiento / memoria (que pueden surgir), es probable que se encuentre con un desafortunado conflicto de nombres, cuando redefina una variable importante o no use el valor que cree que usa.
Debe evitarse definir cosas en el espacio de nombres global.
fuente