Phiên bản đầu tiên:
for (var x in set) {
...
}
khai báo một biến cục bộ được gọi x. Phiên bản thứ hai:
for (x in set) {
...
}
không làm.
Nếu xđã là một biến cục bộ (tức là bạn có một var x;hoặc var x = ...;một nơi nào đó trước đó trong phạm vi hiện tại của bạn (tức là hàm hiện tại)) thì chúng sẽ tương đương. Nếu xchưa phải là biến cục bộ, thì việc sử dụng biến thứ hai sẽ ngầm khai báo một biến toàn cục x. Hãy xem xét mã này:
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();
bạn có thể mong đợi điều này để cảnh báo hey, there, heli, hey, there, copter, nhưng kể từ khi xlà một và giống nhau nó sẽ cảnh báo hey, there,there , hey, there, there. Bạn không muốn điều đó! Sử dụng var xtrong các forvòng lặp của bạn .
Trên hết: nếu forvòng lặp nằm trong phạm vi toàn cục (tức là không nằm trong một hàm), thì phạm vi cục bộ (phạm vi xđược khai báo trong nếu bạn sử dụng var x) giống với phạm vi toàn cục (phạm vi xđược khai báo ngầm trong nếu bạn sử dụng xmà không có var), vì vậy hai phiên bản sẽ giống hệt nhau.
varkhông được sử dụng để khai báo các iteratori:Uncaught ReferenceError: i is not defined. Vì vậy, tôi sẽ sử dụng nó từ bây giờ: / webpack xử lý biến "toàn cầu" thật là thú vị, cho thấy hơn: stackoverflow.com/a/40416826