文章目录
- ECMAScript变量是松散类型的,意思是变量可以用于保存任何类型的数据
- 每个变量只不过是一个用于保存任意值的命名占位符
- 有3个关键字可以声明变量:var、const和let
- 其中,var在ES的所有版本中都可以使用,而const和let只能在ES6及更晚的版本中使用
1. var
var message;
定义了一个名为message 的变量,可以用它保存任何类型的值,不初始化的情况下,变量会保存一个特殊值undefined
1.1 var 声明作用域
- 使用var 操作符定义的变量会成为包含它的函数的局部变量
1.2 var 声明提升
- 使用var关键字声明的变量会自动提升(hoist)到函数作用域顶部
function foo() {
console.log(age);
var age = 26;
}
foo(); // undefined
等价于
function foo() {
var age;
console.log(age);
age = 26;
}
foo(); // undefined
- 这就是所谓的“提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部。
- 反复多次使用var声明同一个变量也没有问题
2. let(注意与var的区别)
2.1 let 声明作用域(块级作用域)
- 与var最明显的区别是,let 声明的范围是块作用域,而var声明的范围是函数作用域
- let 不允许同一个块作用域中出现冗余声明
if (true) {
let a