Outros já explicaram undefined
. undefined
é como uma variável global que pode ser redefinida para qualquer valor. Essa técnica é para impedir que todas as verificações indefinidas sejam quebradas se alguém escreveu digamos, em undefined = 10
algum lugar. Um argumento que nunca é passado é garantido como real, undefined
independentemente do valor da variável undefined
.
A razão para passar pela janela pode ser ilustrada com o exemplo a seguir.
(function() {
console.log(window);
...
...
...
var window = 10;
})();
O que o console registra? O valor do window
objeto certo? Errado! 10? Errado! Ele registra undefined
. O interpretador Javascript (ou compilador JIT) o reescreve desta maneira -
(function() {
var window; //and every other var in this function
console.log(window);
...
...
...
window = 10;
})();
No entanto, se você receber a window
variável como argumento, não haverá var e, portanto, nenhuma surpresa.
Eu não sei se o jQuery está fazendo isso, mas se você estiver redefinindo window
a variável local em qualquer lugar da sua função por qualquer motivo, é uma boa ideia emprestá-la do escopo global.