前端笔记——ES6(1)
let
- 不存在变量提升,先声明后使用
- 暂时性死区,在当前作用域声明的变量,在变量声明语句之前不可用,typeof 操作也不再百分百安全
- 不允许重复声明
经典题目
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10
为什么要块级作用域
- 内层变量可能会覆盖外层变量
var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = "hello world"; } } f(); // undefined
- 循环变量泄露
var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i); // 5
const
- 与前面let的几点相同
- 一旦声明,值就不能改变
- 声明时必须初始化
- 对于引用对象,只是引用的地址不能改变,而不是内容不变