รุ่นแรก:
for (var x in set) {
...
}
ประกาศตัวแปรท้องถิ่นที่เรียกว่าx
. รุ่นที่สอง:
for (x in set) {
...
}
ไม่.
ถ้าx
เป็นตัวแปรท้องถิ่นอยู่แล้ว (เช่นคุณมีvar x;
หรือvar x = ...;
อยู่ที่ไหนสักแห่งก่อนหน้านี้ในขอบเขตปัจจุบันของคุณ (เช่นฟังก์ชันปัจจุบัน)) ค่านั้นจะเทียบเท่า หากยังไม่ได้เป็นตัวแปรท้องถิ่นแล้วใช้สองโดยปริยายจะประกาศตัวแปรทั่วโลกx
x
พิจารณารหัสนี้:
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();
คุณอาจคาดหวังนี้จะแจ้งเตือนhey
, there
, heli
, hey
, there
, copter
, แต่เนื่องจากx
เป็นหนึ่งเดียวกันมันจะแจ้งเตือนhey
, there
, there
, hey
, ,there
there
คุณไม่ต้องการสิ่งนั้น! ใช้var x
ในfor
ลูปของคุณ
ปิดท้ายทั้งหมด: ถ้าfor
ลูปอยู่ในขอบเขตส่วนกลาง (เช่นไม่อยู่ในฟังก์ชัน) ขอบเขตโลคัล (ขอบเขตx
จะถูกประกาศในถ้าคุณใช้var x
) จะเหมือนกับขอบเขตส่วนกลาง (ขอบเขตx
ถูกประกาศโดยปริยายใน หากคุณใช้x
โดยไม่มี var) ดังนั้นทั้งสองเวอร์ชันจะเหมือนกัน
var
ไม่ได้ใช้ในการประกาศการทำซ้ำโดย:i
Uncaught ReferenceError: i is not defined
ดังนั้นฉันจะใช้ต่อจากนี้: / webpack ถือว่าตัวแปร "global" แปลก ๆ สำหรับข้อมูลเพิ่มเติมโปรดดู: stackoverflow.com/a/40416826