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)
}
}