รหัสนี้ส่งออก 10 10s แทนที่จะเป็น 0 ถึง 9 ที่คาดหวังเนื่องจากมีการอ้างอิงถึงฉันในการปิดและเมื่อฟังก์ชั่นถูกดำเนินการฉันได้กลายเป็น 10
ฟังก์ชั่น f1 () {สำหรับ (var i = 0; i <10; i ++) {settimeout (function () {alert (i);}, 1000);}} f1 ();ในการแก้ปัญหาข้างต้นคุณสามารถใช้ฟังก์ชั่นที่ไม่ระบุชื่อด้วยตนเอง
ฟังก์ชั่น f2 () {สำหรับ (var i = 0; i <10; i ++) {(ฟังก์ชั่น (e) {settimeout (ฟังก์ชัน () {การแจ้งเตือน (e);}, 1000);}) (i);}} f2 ();ฟังก์ชั่นที่ไม่ระบุชื่อที่นี่ใช้ฉันเป็นพารามิเตอร์และที่นี่ E จะมีสำเนาของ I และการอ้างอิงคือการอ้างอิงถึง E ซึ่งหลีกเลี่ยงปัญหาข้างต้น