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