w3schools type tipos sirve script que pasar para llamar funciones funcion entre desde archivo anidadas javascript jquery yui idioms

tipos - script type= text/javascript para que sirve



Idioma de JavaScript: crea una funciĆ³n solo para invocarla (2)

Estoy aprendiendo YUI y ocasionalmente he visto este idioma:

<script> (function x(){ do abcxyz})(); </script>

¿Por qué crean una función solo para invocarla? ¿Por qué no solo escribir:

<script> do abcxyz </script>

Por ejemplo ver here .


Están aprovechando los closures .

Una breve explicación: dado que JS usa el alcance a nivel de función, puede hacer un montón de acciones dentro de una función y hacer que permanezca en ese ámbito. Esto es útil para invocar código que no desordena con el espacio de nombres global. También le permite a uno crear variables privadas: si declara una variable dentro de una función anónima y la ejecuta inmediatamente, solo el código dentro de la función anónima puede acceder a esa variable.

Por ejemplo, supongamos que quiero hacer un generador de identificación único global. Uno podría hacer código como este:

var counter = 0; var genId = function() { counter = counter + 1; return counter; }

Sin embargo, ahora cualquiera puede meterse con el contador , y ahora he contaminado el espacio de nombres global con dos variables ( contador y genId ).

En su lugar, podría usar una función anónima para generar mi función de contador:

var genId = function() { var counter = 0; var genIdImpl = function() { counter = counter + 1; return counter; } return genIdImpl; }();

Ahora, solo tengo una variable en el espacio de nombres global, lo cual es ventajoso. Más importante aún, la variable de contador ahora está a salvo de ser modificada: solo existe en el ámbito de la función anónima, por lo que solo la función genIdImpl (que se definió en el mismo ámbito) puede acceder a ella.

Parece que en el código de ejemplo de YUI, solo quieren ejecutar código que no contamine el espacio de nombres global en absoluto.


Quieren evitar las colisiones entre espacios de nombres, supongo. Parece una buena práctica en JS.