İlk versiyon:
for (var x in set) {
...
}
adlı yerel bir değişken bildirir x
. İkinci versiyon:
for (x in set) {
...
}
değil.
Eğer x
(bir var yani zaten yerel bir değişkendir var x;
veya var x = ...;
bir yere daha erken geçerli kapsamda (yani şimdiki işlevi)) o zaman eşdeğer olacaktır. Eğer x
zaten yerel bir değişken değildir, o zaman ikinci kullanarak örtülü bir küresel değişkeni ilan edecek x
. Bu kodu düşünün:
var obj1 = {hey: 10, there: 15};
var obj2 = {heli: 99, copter: 10};
function loop1() {
for (x in obj1) alert(x);
}
function loop2() {
for (x in obj2) {
loop1();
alert(x);
}
}
loop2();
Uyarının bu beklediğinizden hey
, there
, heli
, hey
, there
, copter
, ancak o zamandan beri x
bir ve onu uyaracaktır aynıdır hey
, there
, there
, hey
, there
, there
. Bunu istemezsin! Kullan var x
senin içinde for
döngüler.
Her şeyin üstesinden gelmek için: for
döngü genel kapsamdaysa (yani bir işlevde değilse), yerel kapsam (kullanıyorsanız kapsam x
içinde bildirilir var x
) genel kapsam ile aynıdır (kapsam x
, içinde dolaylı olarak bildirilir) x
var olmadan kullanırsanız ), bu nedenle iki sürüm aynı olacaktır.
var
yineleyici ilan etmek kullanılmamıştıri
:Uncaught ReferenceError: i is not defined
. Bundan sonra onu kullanacağım: / webpack "global" değişkenleri tuhaf bir şekilde ele alıyor, daha fazlası için bkz: stackoverflow.com/a/40416826