Как изменить значение глобальной переменной внутри функции

132

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

NullPoiиteя
источник

Ответы:

149

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

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

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

Spudley
источник
3
У меня это не работает: country = 'foo' $ .ajax ({url: '/ some-endpoint', success: function (data) {country = data.country;}}); console.log (country) // выводит 'foo'
Марк Симпсон
41
@MarkSimpson - причина, по которой он не работает, заключается в том, что в вашем примере console.logон запускается немедленно, но функция успеха ajax запускается только в какой-то момент позже, когда вызов ajax фактически возвращает ответ. Это фундаментальный момент об асинхронной природе ajax: код в функциях закрытия не выполняется последовательно с кодом вокруг него. Это важно понимать при изучении кода, управляемого событиями.
Spudley
Чтобы сделать console.log более точным в этом случае, можно было бы поместить его в функцию успеха ajax.
DWils
Еще одна из моих блестящих идей: дважды проверьте написание и регистр имени переменной. Очень легко упустить такую ​​простую вещь, как sessionId vs sessionID.
whitebeard
У меня с ними такая же проблема. Но наконец понял, спасибо @Spudley!
Yudhistira Bayu
64
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20
Крис
источник
1
спасибо за этот замечательный простой пример. Логика этого не давала мне покоя. Просто нужно было привыкнуть к 4d мышлению.
Mikey3Strings 09
29

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

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

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

См. Этот jsfiddle

x = 1;
y = 2;
z = 3;

function a(y) {
  // y is local to the function, because it is a function parameter
  console.log('local y: should be 10:', y); // local y through function parameter
  y = 3; // will only overwrite local y, not 'global' y
  console.log('local y: should be 3:', y); // local y
  // global value could be accessed by referencing through window object
  console.log('global y: should be 2:', window.y) // global y, different from local y ()

  var x; // makes x a local variable
  x = 4; // only overwrites local x
  console.log('local x: should be 4:', x); // local x
  
  z = 5; // overwrites global z, because there is no local z
  console.log('local z: should be 5:', z); // local z, same as global
  console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a

редактировать

В ES2015 появилось еще два ключевых слова constи let, которые также влияют на объем переменной ( спецификация языка )

yunzen
источник
1
+1 для описания конфликта имен между глобальной и локально объявленной переменной и способов доступа к ней.
gdbj
6
<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>
Иман Седиги
источник
Только не используйте varключевое слово внутри функции, то вам не придется иметь дело сdocument.getElementById("outside").value = x;
Бен Aubin
5
var a = 10;

myFunction(a);

function myFunction(a){
   window['a'] = 20; // or window.a
}

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

С помощью window ['variableName'] или window.variableName вы можете изменить значение глобальной переменной внутри функции.

Стерлинг Диас
источник
Это единственный способ изменить значение глобальной переменной в угловом компоненте !!!
Падмарадж Бхат,