扩展作用域
传统JavaScript中变量作用域包括全局作用域以及函数作用域;
函数内变量申明有提升功能;
块级作用域
{}
可以使用let 定义块作用域,此处无变量声明提升;新名词术语: 暂时性死区
ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
vartmp=123;
if(true) {
tmp='abc';// ReferenceError
let tmp;
}
块级作用域内申明函数,仍然走变量申明提升,不做更改;
块级作用域内变量值,无法返回,后期使用 do 语法返回
let 变量将于window,global全局对象脱离;
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a 或者采用通用方法,写成 this.a
window.a // 1
let b = 1;
window.b // undefined