Bagaimana cara mengubah nilai variabel global di dalam suatu fungsi

131

Saya menggunakan JavaScript dan saya membuat variabel global. Saya mendefinisikannya di luar fungsi dan saya ingin mengubah nilai variabel global dari dalam suatu fungsi dan menggunakannya dari fungsi lain, bagaimana saya melakukan ini?

NullPoiиteя
sumber

Jawaban:

148

Referensi saja variabel di dalam fungsi; tidak ada sihir, cukup gunakan namanya. Jika sudah dibuat secara global, maka Anda akan memperbarui variabel global.

Anda bisa mengesampingkan perilaku ini dengan mendeklarasikannya menggunakan lokal var, tetapi jika Anda tidak menggunakannya var, maka nama variabel yang digunakan dalam suatu fungsi akan bersifat global jika variabel itu telah dideklarasikan secara global.

Itu sebabnya dianggap praktik terbaik untuk selalu mendeklarasikan variabel Anda secara eksplisit var. Karena jika Anda melupakannya, Anda dapat mulai mengacaukan global secara tidak sengaja. Itu kesalahan mudah untuk dilakukan. Tetapi dalam kasus Anda, ini berbalik dan menjadi jawaban yang mudah untuk pertanyaan Anda.

Spudley
sumber
3
Ini tidak berfungsi untuk saya: country = 'foo' $ .ajax ({url: '/ some-endpoint', success: function (data) {country = data.country;}}); console.log (negara) // keluaran 'foo'
Mark Simpson
41
@MarkSimpson - alasan itu tidak berhasil adalah karena dalam contoh Anda, console.logini dijalankan segera, tetapi fungsi keberhasilan ajax hanya berjalan di beberapa titik nanti ketika panggilan ajax benar-benar mengembalikan respons. Ini adalah poin mendasar tentang sifat asinkron dari ajax: kode dalam fungsi penutupan tidak berjalan secara berurutan dengan kode di sekitarnya. Ini penting untuk dipahami ketika belajar tentang kode yang digerakkan oleh peristiwa.
Spudley
Cara untuk mendapatkan console.log agar lebih akurat dalam hal ini adalah dengan meletakkannya di dalam fungsi sukses ajax.
DWils
Satu lagi wawasan brilian saya: periksa ejaan dan huruf dari nama variabel. Sangat mudah untuk melewatkan sesuatu yang sederhana seperti sessionId vs sessionID.
whitebeard
Saya memiliki masalah yang sama pada ini. Namun akhirnya dipahami, terima kasih @Spudley!
Yudhistira Bayu
63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20
Chris
sumber
1
terima kasih untuk contoh sederhana yang luar biasa ini. Logika dari ini adalah melakukan kepalaku. Baru saja terbiasa dengan pemikiran 4d.
Mikey3Strings
29

Cukup gunakan nama variabel itu.

Dalam JavaScript, variabel hanya bersifat lokal untuk suatu fungsi, jika mereka adalah parameter fungsi atau jika Anda mendeklarasikannya sebagai lokal secara eksplisit dengan mengetikkan varkata kunci di depan nama variabel.

Jika nama nilai lokal memiliki nama yang sama dengan nilai global, gunakan windowobjek

Lihat jsfiddle ini

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

Edit

Dengan ES2015, ada dua kata kunci lagi constdan let, yang juga mempengaruhi ruang lingkup variabel ( Spesifikasi Bahasa )

Yunzen
sumber
1
+1 untuk menggambarkan tabrakan nama antara variabel global dan yang dideklarasikan secara lokal dan cara mengaksesnya.
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>
Iman Sedighi
sumber
Hanya saja, jangan gunakan varkata kunci di dalam fungsi, maka Anda tidak harus berurusan dengandocument.getElementById("outside").value = x;
Ben 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

Dengan window ['variableName'] atau window.variableName Anda dapat mengubah nilai variabel global di dalam suatu fungsi.

Sterling Diaz
sumber
Ini adalah satu-satunya cara saya bisa mengubah nilai variabel global dalam komponen sudut !!!
Padmaraj Bhat