注意:
ES5 只有全局作用域和函数作用域
ES6的let和const是块级作用域
特点:
# 块级作用域
# 不存在变量提升
# 暂时性死区
# 不允许重复声明
1. let命令
例子1:
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。
例子2:
for循环
计数器很适合用let
命令。
对比 var
和let
的区别:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
在for循环上用var
声明的变量i
属于全局变量,所以进行了10次循环,直到第11次退出循环的时候后,i
的值是10。然后调用a[6]()
,此时输出的i
就是全局i
的值10.
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
对于let
声明的变量i
,当前的i
只在本轮循环有效,所以每一次循环的i
其实都是一个新的变量.最后调用a[6]()
,由于每轮循环函数保存的i
值是不同的。所以,运行结果就是那一轮的i
=6。
2. const命令
# const
声明一个只读的常量。一旦声明,常量的值就不能改变
# const
一旦声明变量,就必须立即初始化
网友评论