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循环中,同时也不会出现变量提升的现象;同一个代码块内,不可以重复声明相同的变量,也不可以重复声明函数内的参数。