Bir fonksiyonun içindeki global değişkenin değerini nasıl değiştiririm


131

JavaScript kullanıyorum ve global bir değişken oluşturuyorum. Bunu bir fonksiyonun dışında tanımlıyorum ve global değişken değerini bir fonksiyonun içinden değiştirip başka bir fonksiyondan kullanmak istiyorum, bunu nasıl yapabilirim?

Yanıtlar:


148

Sadece fonksiyonun içindeki değişkeni referans alın; sihir yok, sadece adını kullan. Global olarak oluşturulmuşsa, global değişkeni güncelleyeceksiniz.

Bu davranışı yerel olarak bildirerek geçersiz kılabilirsiniz var, ancak kullanmazsanız var, bir işlevde kullanılan bir değişken adı, bu değişken global olarak bildirilmişse global olacaktır.

Bu nedenle değişkenlerinizi her zaman açıkça belirtmek en iyi uygulama olarak kabul edilir var. Çünkü eğer unutursan, tesadüfen küresellerle uğraşmaya başlayabilirsin. Yapması kolay bir hata. Ama sizin durumunuzda, bu tersine döner ve sorunuza kolay bir cevap olur.


3
Bu benim için çalışmıyor: country = 'foo' $ .ajax ({url: '/ bir uç nokta', başarı: function (data) {country = data.country;}}); console.log (ülke) // 'foo' çıktı
Mark Simpson

41
@MarkSimpson - çalışmamasının nedeni, örneğinizde console.loghemen çalıştırılmasıdır, ancak ajax başarı işlevi yalnızca daha sonra ajax çağrısı gerçekten bir yanıt döndürdüğünde bir noktada çalışır. Bu, ajax'ın eşzamansız doğasıyla ilgili temel bir noktadır: Kapanış işlevlerindeki kod, etrafındaki kodla birlikte sırayla çalışmaz. Olay güdümlü kod hakkında bilgi edinirken bunu kavramak önemlidir.
Spudley

Bu durumda console.log'un daha doğru olmasını sağlamanın yolu, onu ajax başarı işlevinin içine koymak olacaktır.
DWils

Parlak içgörülerimden bir diğeri: değişken adının yazımını ve durumunu iki kez kontrol edin. SessionId vs sessionID kadar basit bir şeyi gözden kaçırmak çok kolaydır.
beyazsakal

Bunlarda da aynı sorunu yaşıyorum. Ama sonunda anladım, teşekkürler @Spudley!
Yudhistira Bayu

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

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

1
bu harika basit örnek için teşekkürler. Bunun mantığı kafamı karıştırıyordu. Sadece 4d düşünmeye alışmaya başladım.
Mikey3Strings

29

Sadece o değişkenin adını kullanın.

JavaScript'te, değişkenler, işlevin parametreleriyse veya vardeğişkenin adından önce anahtar kelimeyi yazarak açık bir şekilde yerel olarak bildirirseniz, yalnızca bir işlev için yereldir .

Yerel değerin adı genel değerle aynı ada sahipse, windownesneyi kullanın

Bu jsfiddle'a bakın

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

Düzenle

ES2015 ile iki anahtar kelime daha geldi constve letbu, bir değişkenin kapsamını da etkiliyor ( Dil Spesifikasyonu )


1
Global ve yerel olarak bildirilen değişken arasındaki ad çakışmasını ve ona nasıl erişileceğini açıklamak için +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>

varAnahtar kelimeyi işlevin içinde kullanmayın , o zaman document.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

İle pencerenin [ 'variableName'] veya window.variableName Bir fonksiyon içerisinde global değişkenin değerini değiştirebilir.


Açısal bileşendeki global değişken değerini değiştirebilmemin tek yolu bu !!!
Padmaraj Bhat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.