Otros lo han explicado undefined. undefinedes como una variable global que se puede redefinir a cualquier valor. Esta técnica es para evitar que se rompan todas las comprobaciones indefinidas si alguien escribió decir, en undefined = 10algún lugar. Se garantiza que un argumento que nunca se pasa será real, undefinedindependientemente del valor de la variable undefined .
La razón para pasar la ventana se puede ilustrar con el siguiente ejemplo.
(function() {
console.log(window);
...
...
...
var window = 10;
})();
¿Qué registra la consola? El valor del windowobjeto ¿verdad? ¡Incorrecto! 10? ¡Incorrecto! Se registra undefined. El intérprete de Javascript (o el compilador JIT) lo reescribe de esta manera:
(function() {
var window; //and every other var in this function
console.log(window);
...
...
...
window = 10;
})();
Sin embargo, si obtiene la windowvariable como argumento, no hay var y, por lo tanto, no hay sorpresas.
No sé si jQuery lo está haciendo, pero si está redefiniendo windowla variable local en cualquier lugar de su función por cualquier razón, es una buena idea tomarla prestada del alcance global.