Rumah >hujung hadapan web >tutorial js >Gunakan fungsi tanpa nama laksana sendiri untuk menyelesaikan masalah menggunakan penutupan dalam untuk kemahiran loops_javascript
Kod ini mengeluarkan 10 10s dan bukannya 0 hingga 9 yang dijangkakan, kerana penutupan mengandungi rujukan kepada i, dan kemudian i telah menjadi 10 apabila fungsi itu dilaksanakan
function f1(){ for(var i = 0; i < 10; i++) { setTimeout(function() { alert(i); }, 1000); } } f1();
Untuk menyelesaikan masalah di atas, anda boleh menggunakan fungsi tanpa nama laksana sendiri
function f2(){ for(var i = 0; i < 10; i++) { (function(e) { setTimeout(function() { alert(e); }, 1000); })(i); } } f2();
Fungsi tanpa nama di sini mengambil i sebagai parameter, dan e di sini akan mempunyai salinan i, dan rujukan adalah rujukan kepada e, yang mengelakkan masalah di atas