Як змінити значення глобальної змінної всередині функції


131

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

Відповіді:


148

Просто посилайтеся на змінну всередині функції; ніякої магії, просто використовуйте це ім'я. Якщо він створений у всьому світі, ви будете оновлювати глобальну змінну.

Ви можете змінити цю поведінку, оголосивши її локально var, але якщо ви не використовуєте var, то назва змінної, яка використовується у функції, буде глобальною, якщо ця змінна була оголошена глобально.

Ось чому вважається найкращою практикою завжди чітко оголошувати свої змінні за допомогою var. Тому що якщо ви це забудете, ви можете почати возитися з глобалами випадково. Це легко зробити помилку. Але у вашому випадку це обертається і стає легкою відповіддю на ваше запитання.


3
Для мене це не працює: country = 'foo' $ .ajax ({url: '/ деяка кінцева точка', успіх: функція (дані) {country = data.country;}}); console.log (країна) // виводить 'foo'
Марк Сімпсон

41
@MarkSimpson - причина цього не працює в тому, що у вашому прикладі console.logфункція запускається негайно, але функція успіху ajax запускається лише в якийсь момент пізніше, коли виклик Ajax насправді повертає відповідь. Це є принциповим моментом щодо асинхронного характеру ajax: код у функціях закриття не працює в порядку з кодом навколо нього. Це важливо зрозуміти, вивчаючи код, керований подіями.
Спудлі

Способом отримати точніше console.log в цьому випадку було б помістити його всередині функції успіху ajax.
DWils

Ще одне моє блискуче розуміння: двічі перевірте написання та регістр назви змінної. Дуже легко пропустити щось таке просте, як sessionId vs sessionID.
біла борода

У мене така ж проблема щодо них. Але нарешті зрозумів, дякую @Spudley!
Yudhistira Bayu

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

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

1
дякую за цей дивовижний простий приклад. Логіка цього робила мені голову. Просто я звик звикати до 4d-мислення.
Mikey3Strings

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, які також впливають на сферу змінної ( Специфікація мови )


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;
Бен Аубін

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

За допомогою вікна [' variaName '] або window.variableName ви можете змінювати значення глобальної змінної всередині функції.


Це єдиний спосіб, коли я міг би змінити глобальне значення змінної у кутовій складовій !!!
Падмарай Бхат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.