let關鍵字
1.let關鍵字聲明的變量僅僅在自己的塊級作用域內起作用,出了塊級作用域就不起作用了;
var arr2 = [];
for (let index = 0; index < 10; index++) {
arr2[index] = function () {
console.log(index);
}
}
arr2[6](); // 結果為:6
此結果就是我們想要得到的結果;
任何一對花括號“{ }”中的語句都屬於一個作用域塊,在花括號里面使用let定義的所有的變量在花括號外都是不起作用的,這就是我們所提及的塊級作用域。
2.let關鍵字定義變量時,必須先聲明定義在使用,否則會報錯;
var b = 1;
(function(){
alert(b);
let b = 2;
})(); // 報錯
此時程序會提示報錯,報錯的原因是b未定義;
3.同一個塊級作用域內,不允許重復聲明同一個變量;
{
var a1 = 1;
let a1 = 2;
}
{
let a2 = 3;
let a2 = 4;
}
兩種聲明變量的方式都會報錯,前者是因為a已經使用var關鍵字聲明定義過了,后者是因為是用let關鍵字重復聲明同一個變量;
4.函數內也不能使用let關鍵字重新聲明函數的參數;
function demo(ts) {
let ts = 'xk';
alert(ts);
}
demo(Hi); // 報錯
報錯原因是因為使用了let關鍵字重新聲明了函數的參數ts;
5.使用var關鍵字聲明變量的時,會出現“變量提升”的現象;
// 例如:
var arrList = [];
for(var i = 0;i <= 10; i++){
arrList[i] = function() {
console.log(i);
}
}
arr[8](); // 輸出結果為:10
var num = 1;
(function () {
alert(a); // 變量提升,相當於在彈出a之前,var a;
var num = 2;
})(); // 輸出結果為:undefined 未定義
總結:使用let關鍵字聲明的變量只在跨級作用域中起作用,比較適合for循環中,同時也不會出現變量提升的現象;同一個代碼塊內,不可以重復聲明相同的變量,也不可以重復聲明函數內的參數。
