let
let 声明的变量在代码块内有效
1 | var a []; |
不存在变量提升
var 命令的变量可以在声明之前使用,值为 undefined
暂时性死区
在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。TDZ(temporal dead zone)
1 | var temp = 123 |
有些死区是不易发现的
1 | function bar(x = y, y = 2) { |
不允许重复声明
1 | function foo() { |
1 | var a []; |
var 命令的变量可以在声明之前使用,值为 undefined
在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。TDZ(temporal dead zone)
1 | var temp = 123 |
有些死区是不易发现的
1 | function bar(x = y, y = 2) { |
1 | function foo() { |
某日被书中一段代码误导
1 | var promise = new Promise(function (resolve, reject) { |
由于前面还有这样一段话
如果 Promise 状态已经变成 Resolved,再抛出错误是无效的。
当时看到这,思索了许久,为什么已经 resolve 了这个 ERROR 还是可以往外抛出呢?
后面发现,settimeout 是一个异步函数,throw 会在下一轮事件循环开始时抛出,所以无论是否 resolve,这个 ERROR 都是会抛出的。