var VS let:
a. var聲明的變量是全局範圍內有效的;
let聲明的變量只在當前代碼塊內有效。
eg 1:
{
var a = 1;
let b = 2;
}
console.log(a); //a=1
console.log(b); //b is not defined.
b. var聲明的變量,即使在不同地方有重複的聲明,在全局範圍內也始終只存在一個副本。
let聲明的變量只在當前的代碼塊內有效,當再次進入代碼塊時,let變量已經是一個新的副本,不會覆蓋到上次進入代碼塊時的let變量。
eg2:
var arr=[];
for(let i=0; i<10; ++i){
arr[i]=function(){
console.log(i); //可以理解爲此時的i是cpp中的按值傳遞的。
}
}
arr[5](); //5
var arr=[];
for(var i=0; i<10; ++i){
arr[i]=function(){
console.log(i); //可以理解爲此時的i是cpp中的引用傳遞的。
}
}
arr[5](); //10