1. 程式人生 > >ES6(阮一峰)學習總結

ES6(阮一峰)學習總結

gpo efi post 調用 function () 會有 col clas

以下所寫都是個人的理解,可能會有不正確的地方。

1.let和var的區別

var a= [];
for (let i = 0; i <10; i++) {
    a[i]=function(){
        console.log(i);
    };
}
console.log(i);
//i is not defined

let聲明的變量在循環體外是不可訪問的,是個局部變量。

var a= [];
for (var i = 0; i <10; i++) {
    a[i]=function(){
        console.log(i);
    };
}
console.log(i);      
//10

var聲明的變量是個全局變量,所以循環體外可以訪問,值為循環結束後的值:10。

var a= [];
for (var i = 0; i <10; i++) {
    a[i]=function(){
        console.log(i);
    };
}
//i = 10;    
a[8]() ;             //10
i=111;
a[8](); //111

var聲明的變量,在全局範圍內有效,循環結束後i=10,

調用a[8](),實際上是執行函數 function(){console.log(i)};自然結果為10;

當人為改變i=111後,調用a[8](),繼續執行console.log(i);結果自然為111.

var a= [];
for (let i = 0; i <10; i++) {
    a[i]=function(){
        console.log(i);
    };
}   
a[8]() ;            //8
i=10;
a[8](); //8

而用let聲明的變量,在循環體外是不能訪問的,那麽

這裏的a[8](),執行的就不是 function(){console.log(i)}了,因為在循環體外是找不到這個i的,所以

這裏的a[8](),執行的是 function(){console.log(8)},就算人為給它一個i=10,執行的還是console.log(8)。

總結的話:

let聲明變量時,若let變量存在於循環體內,那麽在多次循環之間這個let變量值是互不影響的;

var聲明的變量由於是全局變量,多次循環是會改變它的值的,當調用時,永遠是調用這唯一一個變量的最終值。

ES6(阮一峰)學習總結