2012-06-03 7 views

Respuesta

104

Sólo referencia a la variable dentro de la función; sin magia, solo usa su nombre. Si ha sido creado globalmente, entonces estará actualizando la variable global.

Puede anular este comportamiento al declararlo localmente usando var, pero si no usa var, un nombre de variable utilizado en una función será global si esa variable se ha declarado globalmente.

Es por eso que se considera una buena práctica declarar siempre sus variables explícitamente con var. Porque si lo olvidas, puedes empezar a jugar con los globales por accidente. Es un error fácil de hacer. Pero en su caso, esta vuelta y se convierte en una respuesta fácil a su pregunta.

+1

Esto no funciona para mí: país = 'foo' $ .ajax ({ url: '/ some-punto final', éxito: function (datos) { país = data.country; } }); console.log (country) // salidas 'foo' –

+28

@MarkSimpson: la razón por la que no funciona es porque en su ejemplo, 'console.log' se ejecuta inmediatamente, pero la función de éxito de ajax solo se ejecuta en algún punto más tarde cuando la llamada ajax realmente devuelve una respuesta. Este es un punto fundamental acerca de la naturaleza asíncrona de ajax: el código en las funciones de cierre no se ejecuta en secuencia con el código que lo rodea. Esto es importante de comprender cuando se trata de un código basado en eventos. – Spudley

+0

Gracias por la explicación, @Spudley –

39
var a = 10; 

myFunction(); 

function myFunction(){ 
    a = 20; 
} 

alert("Value of 'a' outside the function " + a); //outputs 20 
+0

gracias por este increíble ejemplo simple. La lógica de esto me estaba metiendo en la cabeza. Solo tengo que acostumbrarme a pensar en 4d. – Mikey3Strings

18

Simplemente utilice el nombre de esa variable.

En JavaScript, las variables son solo locales para una función, si son los parámetros de la función o si los declara como locales explícitamente escribiendo la palabra clave var antes del nombre de la variable.

Si el nombre del valor local tiene el mismo nombre que el valor global, utilice el objeto window

ver este jsfiddle

x = 1; 
y = 2; 
function a(y) { 
    // y is local to the function, because it is a function parameter 
    alert(y); // 10 
    y = 3; // will only overwrite local y, not 'global' y 
    var x; // makes x a local variable 
    x = 4; // only overwrites local x 
    alert(y); // 3 
    alert(x); // 4 
    // global value could be accessed by referencing through window object 
    alert(window.y) // 2 global y 
} 
a(10); 
alert(x); // 1; this is the global value 
alert(y); // 2; global as well 
+1

+1 para describir la colisión del nombre entre la variable global y la declarada localmente y cómo acceder a ella. – gdbj

5
<script> 
var x = 2; //X is global and value is 2. 

function myFunction() 
{ 
x = 7; //x is local variable and value is 7. 

} 

myFunction(); 

alert(x); //x is gobal variable and the value is 7 
</script> 
+0

Simplemente no use la palabra clave 'var' dentro de la función, entonces no tiene que tratar con' document.getElementById ("outside"). Value = x; ' –

Cuestiones relacionadas