รุ่นแรก:
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ไม่ได้ใช้ในการประกาศการทำซ้ำโดย:iUncaught ReferenceError: i is not definedดังนั้นฉันจะใช้ต่อจากนี้: / webpack ถือว่าตัวแปร "global" แปลก ๆ สำหรับข้อมูลเพิ่มเติมโปรดดู: stackoverflow.com/a/40416826