这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
今天主要是学的JS,JS主要是ES6以后的部分比较重要,今天就谈一个比较简单的let、const、var。也是老生常谈了
let
-
不允许重复声明
-
不存在变量提升
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。 -
暂时性死区。只要块级作用域内存在
let命令,它所声明的变量就绑定这个区域,不再受外部的影响。这个主要是能洗掉链上的属性,比如一些变量在外部let了,在块里面又let一次,感觉像是怎么都有一个能用,但却会报ReferenceErrorvar tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }上面代码中,存在全局变量
tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。“暂时性死区”也意味着
typeof不再是一个百分之百安全的操作。 -
块级作用域
有一个场景就是for循环里面打印i,尤其是settimeout以后再打印,问你打印结果是什么。如果是var的话,每一轮都会var一个新的来覆盖,那肯定打印最后一次的。而let每次迭代声明一个独立变量实例,就会一个数打印一次
const
基本与let一致,除了:
- 声明必须赋初始值
- 值不允许修改
var、let、const的使用
基本上,不要使用var了。不变量用const,会变的量用let最好
ES6 声明变量的六种方法
ES5 只有两种声明变量的方法:var命令和function命令。
ES6 除了添加let和const命令,另外还有两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。