2011-03-01 16 views
8

posibles duplicados:
How does this JavaScript/JQuery Syntax work: (function(window, undefined) { })(window)?
What advantages does using (function(window, document, undefined) { … })(window, document) confer?variable llamada indefinido en JavaScript Bibliotecas

que he visto en muchas bibliotecas de javascript crear una variable llamada "indefinido", iam capaz de averiguar su propósito, a continuación se muestran las líneas copiadas de la biblioteca jQuery

* Date: Wed Feb 23 13:55:29 2011 -0500 
*/ 
(function(window, undefined) { 

// Use the correct document accordingly with window argument (sandbox) 
var document = window.document; 
var jQuery = (function() { 

¡Por favor sugiérame el motivo y los beneficios de hacerlo!

Respuesta

7

Lo que se ve es algo como esto:

(function(undefined) { 
    /* lots of code */ 
}()); 

Esto crea una función anónima e inmediatamente lo ejecuta. La función tiene un parámetro llamado undefined. Como no se ha pasado ningún argumento a la función, la variable undefined es, de hecho, el Javascript primitive value undefined.

Entonces, ¿por qué quieres hacer esto? Bueno, el problema es que en realidad se puede crear una variable con el nombre undefined y configurarlo para que todo lo que quieras, por ejemplo .:

var undefined = 'some text'; 

Una prueba myvalue === undefined dentro de su código entonces tener resultados inesperados.

La función anónima con el parámetro llamado undefined esencialmente "restablece" el valor de undefined al valor primitivo, para que pueda consultarlo si lo desea sin tener que preocuparse de si tiene el valor correcto.

6

Es para asegurarse de que undefined es realmente undefined. Paul Irish calls it the asshole effect, otras js incluidas en la página podrían cambiar el significado de indefinido, y luego obtendrá resultados inesperados.

+1

Nunca lo entendí del todo. También podría hacer algo tonto como 'jQuery = {}', y luego jQuery dejaría de funcionar, lo cual no es sorprendente. Si quieres disparar en el pie al poner 'undefined = true', ¿por qué detenerte? – Andrea

+1

Bueno, alguien más podría intentar dispararle en el pie, como un plugin aleatorio que incluya. – Loktar

Cuestiones relacionadas