ES6--let/const以及块级作用域

  Es6学习笔记,有关于let/const以及块级作用域的相关点。


let

let不存在变量提升

1
2
3
4
5
6
7
// var 的情况
console.log(foo); // 输出undefined
var foo = 10;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 10;

使用let会造成暂时性死区,即在此块级的变量,一旦与变量绑定,则不受外部影响。

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

在代码块内,使用let命令声明变量之前,该变量都是不可用的。

不要再块级作用域内声明函数,在ES6中无法运行,因为其无法被提前声明(使用{}的块级作用域列外)。

1
2
3
4
5
6
7
8
9
10
11
// 浏览器的 ES6 环境
function f() { console.log('I am outside!'); }
(function () {
var f = undefined;
if (false) {
function f() { console.log('I am inside!'); }
}
f();
}());
// Uncaught TypeError: f is not a function