for循環與自執行函數


for循環與自執行函數

一般情況下,for循環輸出的值都是判斷條件的最后一個值,但是當for循環里面的代碼是一個自執行函數時有會出現怎樣的情況呢,下面我嘗試了幾種情況:
for(var i = 0 ; i < 5; i++){
    (function(n){
        setTimeout(function(){
            console.log(n)
        },1000)
    })(i)
}

上面循環執行的結果是 0, 1,2,3,4  每隔1秒執行一次。
理解:在for循環的時候內存中儲存了5個自執行函數,並且把i的值儲存在了自執行函數里面,在循環結束之后自動執行自執行函數的處理程序。

for(var i = 0 ; i < lis.length ; i++){
(function(n){
    lis[n].onclick=function(){
        document.body.style.background = 'url(images/bd'+ (n+1) +'.jpg) no-repeat';
    }
    })(i)
}

在for循環里面是一個自執行函數時,在每次循環的過程中會把每個自執行函數在內存中儲存起來,對應的i的值也儲存在函數中。在循環過后(循環速度很快),如果自執行函數里面有事件,就在事件觸發的時候把i傳遞給事件處理函數的形參,然后執行;如果自執行函數里面沒有事件,就會按照順序一一執行。


ES6的語法中 let可以保存循環過程中的i值;
    for(let i = 0 ; i < lis.length ; i++) {
    lis[i].onclick=function(i){
        console.log(i)
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM