天天看點

js var let差別1,作用域不同

1,作用域不同

var作用域是全局作用域

let作用域是塊級作用域

var a="sss"
{
    let b="www"
}
console.log("aaa",a)
console.log("bbb",b)
           

 報錯

ReferenceError: b is not defined
           

 作用域不同導緻的實際應用差距:

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

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

當i使用var聲明時,它的有效範圍是全局範圍,是以每一輪循環體都使用的是同一個i,直到最後i變成10退出循環。

當i使用let聲明後,目前的i隻能在本輪循環有效,每次循環的i其實是一個新的變量。是以let i聲明方式最後輸出6。

2,var有變量提升,let沒有變量提升

let隻能先聲明再使用變量,若在聲明前使用變量則報錯:

console.log(dadaaa);
let  dadaaa=111

ReferenceError: Cannot access 'dadaaa' before initialization
           

var可以在聲明前使用變量,報undefined

console.log(dadbbb);
var  dadbbb=222

undefined
           

繼續閱讀