立即調用函數中 的 I 的值是如何確定的
for(var?i?=?0;?i?<?len;?i++?){ ? //?使用立即調用的函數表達式,為了獲得不同的I值 ? (function(i){ ? console.log(i); ? imgs[i].onmousemove?=?function(){ ? console.log(i); ? //?先將每道門復位 ? setImgsPos(); ? //?打開門 ? for(var?j?=?1;?j?<=?i;?j++){ ? //imgs[j].style.left?=?parseInt(imgs[j].style.left,10)?-?translate?+?'px'; ? imgs[j].style.left?=?imgs[j].offsetLeft?-?translate?+?'px'; ? } ? } ? })(i); ? }
在這一章中最后一段執(zhí)行代碼, for循環(huán)中套入立即調用匿名函數(function(i))(i);
這里的for循環(huán) 是只循環(huán)了一遍就獲取到了I的不同的值嗎?
若我不用匿名函數立即調用直接
for(var i = 0; i < len; i++ ){
imgs[i].onmousemove = function(){
// 先將每道門復位
setImgsPos();
// 打開門
for(var j = 1; j <= i; j++){
//imgs[j].style.left = parseInt(imgs[j].style.left,10) - translate + 'px';
imgs[j].style.left = imgs[j].offsetLeft - translate + 'px';
}
}
? }
當鼠標滑動圖片 ?4個圖片就同時執(zhí)行,且獲取不到J的值,
我想咨詢下 匿名函數立即調用 (function(i))(i); ?的原理
?
2017-10-30
代碼執(zhí)行一次就立即調用,來取得不同的i值,避免for循環(huán)將所有索引值一次運行完.你可以百度查一下閉包。閉包,閉包
2017-11-01
在自執(zhí)行函數內部鎖住當前的i值,防止它被賦值為最終循環(huán)完的i值
2017-10-30
閉包的知識點還是有點復雜的,我對于匿名函數的簡單理解就是 閉包,使用完以后自動釋放 不占據大量內存空間。希望有實力的大神能詳細講解