Live Note

Remain optimistic

let 声明的变量在代码块内有效

1
2
3
4
5
6
7
var a [];
for (let i = 0; i < 10; i++) {
a[i] = function() {
console.log(i);
};
}
a[6](); //6

不存在变量提升

var 命令的变量可以在声明之前使用,值为 undefined

暂时性死区

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

1
2
3
4
5
var temp = 123
if (true) {
temp = "abc" //ReferenceError
let temp
}

有些死区是不易发现的

1
2
3
4
5
function bar(x = y, y = 2) {
//y is not defined
return [x, y]
}
let x = x //ReferenceError: x is not defined

不允许重复声明

1
2
3
4
function foo() {
var a
let a
}

某日被书中一段代码误导

1
2
3
4
5
6
7
8
9
10
11
var promise = new Promise(function (resolve, reject) {
resolve("ok")
setTimeout(function () {
throw new Error("test")
}, 0)
})
promise.then(function (value) {
console.log(value)
})
//ok
//Uncaught Error : test

由于前面还有这样一段话

如果 Promise 状态已经变成 Resolved,再抛出错误是无效的。

当时看到这,思索了许久,为什么已经 resolve 了这个 ERROR 还是可以往外抛出呢?
后面发现,settimeout 是一个异步函数,throw 会在下一轮事件循环开始时抛出,所以无论是否 resolve,这个 ERROR 都是会抛出的。

开坑第一篇

从大学开始就想着弄一篇自己的博客,但是一直都断断断续的。
在这个风雨交加的午间,我决定开坑了。
可能以后主要还是用于记笔记之类的吧,偶尔应该也会写点杂七杂八的东西。。