for循環與閉包


Es5

 

function box(){
    var arr = [];
    for(var i=0;i<5;i++){
        arr[i] = (function(num){                    //自我執行,並傳參(將匿名函數形成一個表達式)(傳遞一個參數)
            return num;                            //這里的num寫什么都可以                    
        })(i);                                    //這時候這個括號里面的i和上面arr[i]的值是一樣的都是取自for循環里面的i                            
    }                                            
    return arr;
}

在for循環里面的匿名函數執行 return i 語句的時候,由於匿名函數里面沒有i這個變量,所以這個i他要從父級函數中尋找i,而父級函數中的i在for循環中,當找到這個i的時候,是for循環完畢的i,也就是5,所以這個box得到的是一個數組[5,5,5,5,5]。

 

ES6

function box(){
    var arr = [];
    for(let i=0;i<5;i++){        //使用let聲明塊級變量
        arr[i] = function(){
            return i;
        }
    }
    return arr;
}
var b = box();
alert(b[0]());   //0

 

function box(){
    var arr = [];
    for(var i=0;i<5;i++){
        arr[i] = (function(num){                    //自我執行,並傳參(將匿名函數形成一個表達式)(傳遞一個參數)
            return num;                            //這里的num寫什么都可以                    
        })(i);                                    //這時候這個括號里面的i和上面arr[i]的值是一樣的都是取自for循環里面的i                            
    }                                            
    return arr;
}


免責聲明!

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



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