2012-06-03 10 views
83

Я использую JavaScript и создаю глобальную переменную. Я определяю его вне функции, и я хочу изменить значение глобальной переменной изнутри функции и использовать ее из другой функции, как это сделать?Как изменить значение глобальной переменной внутри функции

ответ

104

Просто ссылаться на переменную внутри функции; нет волшебства, просто используйте его имя. Если он был создан глобально, то вы будете обновлять глобальную переменную.

Вы можете переопределить это поведение, объявив его локально, используя var, но если вы не используете var, тогда имя переменной, используемое в функции, будет глобальным, если эта переменная объявлена ​​глобально.

Именно поэтому считается, что лучше всего всегда объявлять ваши переменные с помощью var. Потому что, если вы забудете это, вы можете начать беспорядок с помощью глобальных переменных случайно. Это непростая ошибка. Но в вашем случае этот поворот вокруг и станет легким ответом на ваш вопрос.

+1

Это не работает для меня: страны = 'Foo' $ .ajax ({ URL: '/ некоторые конечных точки', успеха: функция (данные) { страны = data.country; } }); console.log (страна) // выводит «foo» –

+28

@MarkSimpson - причина, по которой он не работает, заключается в том, что в вашем примере «console.log» запускается немедленно, но функция успеха ajax работает только в некоторой точке позже, когда вызов ajax фактически возвращает ответ. Это фундаментальный момент об асинхронном характере ajax: код в функциях закрытия не работает последовательно с кодом вокруг него. Это важно понять при изучении кода, управляемого событиями. – Spudley

+0

Спасибо за объяснение, @Spudley –

39
var a = 10; 

myFunction(); 

function myFunction(){ 
    a = 20; 
} 

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

спасибо за этот удивительный простой пример. Логика этого делала моя голова. Просто нужно привыкнуть к размышлению. – Mikey3Strings

18

Просто используйте имя этой переменной.

В JavaScript переменные являются только локальными для функции, если они являются параметрами (-ами) функции, или если вы объявляете их локально явно, введя ключевое слово var перед именем переменной.

Если имя локального значения имеет такое же имя, как и глобальное значение, используйте window объект

Смотреть это 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 для описания столкновения имен между глобальной и локально объявленной переменной и доступа к нему. – 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

Просто не используйте ключевое слово 'var' внутри функции, тогда вам не нужно иметь дело с' document.getElementById («outside»). Value = x; ' –

Смежные вопросы