目录
一、var关键字
1.var声明作用域
使用var操作符声明的变量会成为包含它的函数的局部变量:
function fun() {
var variable = "hello";
console.log(variable);
};
fun(); // 结果是hello
console.log(variable);
// 结果是Uncaught ReferenceError: variable is not defined
这里,variable变量是在fun函数内部定义的,调用该函数会创建这个变量并初始化值,调用过后变量随即被销毁,因此在函数外部访问会报错。
2.var声明提升
使用var操作符声明的变量会自动提升到它所在的函数作用域的顶部:
function fun() {
console.log(variable); // 在这里先访问
var variable = "hello";
}
fun(); // 结果是 undefined
之所以不会报错,是因为 ECMAScript 运行时把它看成等价于如下代码:
function fun() {
var variable;
console.log(variable);
variable = "hello";
}
fun(); // 结果是 undefined
这就是所谓的“提升”(hoist),也就是把所有变量声明(var操作符声明的)都拉到函数作用域的顶部。
3. var操作符可以重复声明同一个变量
var variable = 1;
var variable = "hello";
var variable = true;
console.log(variable); // true
二、let关键词
1.let声明作用域
let声明的范围是块级作用域 (一对{ }内&