Kode ini menghasilkan 10 10 bukan 0 hingga 9 yang diharapkan, karena ada referensi ke I dalam penutupan, dan kemudian ketika fungsi dieksekusi, saya telah menjadi 10
function f1 () {for (var i = 0; i <10; i ++) {setTimeout (function () {alert (i);}, 1000);}} f1 ();Untuk menyelesaikan masalah di atas, Anda dapat menggunakan fungsi anonim yang dieksekusi sendiri.
function f2 () {for (var i = 0; i <10; i ++) {(function (e) {setTimeOut (function () {alert (e);}, 1000);}) (i);}} f2 ();Fungsi anonim di sini mengambil I sebagai parameter, dan di sini E akan memiliki salinan i, dan referensi adalah referensi ke E, yang menghindari masalah di atas.