声明变量——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一样, 只在声明所在的块级作用域有效,没有变量提升,有暂时性死区,不可重复声明。
  • 一声明就必须马上赋值,只声明不赋值会报错


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容