Bueno, depende. El keyword
var declara la variable en el scope en el cual se está ejecutando la sentencia. Como sabes, en JS las funciones tienen su propio ámbito de variables o scope, por lo tanto, las variables que se se declaran dentro de una función quedan locales y solo se pueden acceder desde esa función o en scopes inferiores (ej. una función dentro de otra), pero nunca superiores.
Código Javascript
:
Ver original(function(x){
(function(){
alert(x); // 123
}());
}(123));
(function(x){
(function(x){
alert(x); // 456
}(456));
}(123));
Cuando no utilizas dicha palabra, JS entiende que ya ha sido declarada anteriormente y por ello va ascendiendo por el scope chain hasta encontrar el primer resultado. Si no encuentra ninguna referencia, la define como propiedad del objeto global.
Código Javascript
:
Ver original(function(x){
x = 1; // Nótese que x ya está declarada en la función aunque no se le haya pasado ningún valor
alert(x); // 1
})();
alert(window.x); // undefined
(function(){
x = 1;
})();
alert(window.x); // 1
Creo que con eso se puede deducir lo que preguntas.