ES6(阮一峰)學習總結
阿新 • • 發佈:2018-02-23
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(阮一峰)學習總結