声明变量——var, let, const

1. var

var a = 2 相当于:

var a;
a = 2 ;

即: var声明的变量会发生变量提升

1.1 有var 和没有 var 的区别:

1.1.1 在顶级作用域声明


如上,不管用不用var,后面赋值的一定会覆盖前面的赋值

1.1.2 在函数内部用var声明


如上,在函数内部,用var声明的变量,只在函数内部有效

1.1.3 在函数内部不用var声明


在函数内部不用var声明,就相当于声明了一个全局变量,在全局内有效

2. let

2.1 let所声明的变量,只在let命令所在的代码块内有效。

2.2 不存在变量提升, 一定要先声明再使用

2.3 暂时性死区

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。



在let存在的那个区块内,tmp被声明之前就被赋值了

2.4 由于以上性质,在for循环中,推荐用let

for (let i = 0; i < 10; i++) {
     // ...
}

这样,i就只在循环体内有效。
另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。



上面代码正确运行,输出了 3 次abc。这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。

2.5 不允许重复声明


函数内部也不能重新声明参数


2.6 const

  • 声明一个只读的常量。一旦声明,常量的值就不能改变。
  • 与let一样, 只在声明所在的块级作用域有效,没有变量提升,有暂时性死区,不可重复声明。
  • 一声明就必须马上赋值,只声明不赋值会报错


你可能感兴趣的:(声明变量——var, let, const)