《ES6标准入门》(一)let和const

一、let命令

1)let的作用域只在代码块内,块外无效;var全局有效

var a = [];
for(var i = 0;i < 10;i++){
a[i] = function(){
console.log(i);
};
}
a[6]();

对于这段代码,变量i是var声明的,在全局范围内有效,所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i值

如果使用let,声明的变量仅在块级作用域内有效,即只在本轮有效,所以每一次的循环其实都是一个新的变量,最后将输出6

2)let不像var会有变量提升,所以变量一定要在声明后使用,否则报错

3)暂时性死区:

只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不在受外部的影响。

var tmp = 123;
if(true){
tmp = 'abc'; //referenceError
let tmp;
}

这段代码中存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。

ES6明确规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。只要在声明之前就使用这些变量,就会报错。(暂时性死区)

暂时性死区的本质就是:只要一进入当前作用域,所要使用的变量就已经存在,但是不可以获取,只有等到声明变量的哪一行代码出现,才可以获取和使用该变量。

4)不允许重复声明,否则报错

扫描二维码关注公众号,回复: 1914075 查看本文章

5)ES6允许块级作用域任意嵌套

内层作用域可以定义外层作用域的同名变量

块级作用域外部无法调用块级作用域内部定义的函数


二、const

const用来声明常量,一旦声明,其值就不可以更改

const一旦声明常量,就必须立即初始化

const的作用域和let命令相同:只在声明所在的块级作用域内有效

const命令声明的常量也不提升,同样存在暂时性死区,只能在声明后使用


ES5只有两种声明变量的方法:var命令和function命令

ES6除了添加let和const之外,还添加了import和class命令,共有6中声明变量的方法











猜你喜欢

转载自blog.csdn.net/weixin_37719279/article/details/80928093