2011-11-26 5 views
8

Duplicar posible:
why do we need to pass in window and undefined into this jquery plugin?Pasando la ventana y sin definir a una función anónima invocada inmediatamente. ¿Por qué?

que he visto el código fuente jQuery hace esto:


(function(window, undefined){ 

... 

}(window)) 

entiendo por qué es útil incluir indefinido, si alguien donde para cambiar "indefinido" antes. Pero la ventana no se puede cambiar. Por lo que sé, ni siquiera necesita ser usado, ¿verdad? ¿Cómo podría ser esto útil?

+0

Posible duplicado: [http://www.stackoverflow.com/questions/6400632/why-do-we-need-to-pass-in-window-and-undefined-into-this-jquery-plugin] (http://www.stackoverflow.com/questions/6400632/why-do-we-need-to-pass-in-window-and-undefined-into-this-jquery-plugin) –

Respuesta

16

Micro optimización.

Tener window como variable local es marginalmente más rápido que una variable global.

También minimiza mejor. Ahora podemos minimizar el parámetro de función a w y usar w.setTimeout, etc. en lugar de window.setTimeout.

bytes Menos = mejor

+0

No entiendo la cosa de la minificación. Ni siquiera necesita escribir "window.document". Puedes simplemente escribir "documento", ¿verdad? ¿Y por qué la ventana como variable local es más rápida? –

+5

Es más rápido acceder a una variable local que a una variable global. 'documento' solo obliga al intepreter a mirar en el alcance global. 'ventana' en '(función (ventana, indefinido) {' es solo un nombre de parámetro ** local **, podría haber puesto '(función (wnd, indefinido) {'. ** referencias ** el objeto global (ventana) solo porque lo pasa como el parámetro cuando se ejecuta automáticamente la función (al final - entre paréntesis). No se deje engañar por el mismo nombre. Como 'ventana' en la lista de parámetros de la función es una cadena arbitraria, usted puede reducir su longitud al minificarlo y llamarlo, por ejemplo, 'W'. –

+0

Interesante. Es un problema de rendimiento. Así que estás diciendo que, dentro de la función anónima, llamar "documento w" es en realidad más rápido que escribir "documento" ? –

9

No sólo lo Raynos publicada sino que también protege el código de la gente que hace algo como esto en otras bibliotecas que pueden estar en su página o acceder a la página de alguna otra manera:

undefined = true; 

En otras palabras, se le protege de otras personas que hacen cosas estúpidas como la redefinición de las variables globales comunes u objetos.

+0

Sí, ya he dicho en mi publicación que entiendo por qué indefinido debe incluirse. –

+3

NP, dejado aquí para alguien más que quizás no sepa. – Bert

+0

Gracias por la nota :) –

Cuestiones relacionadas