深入浅出Promise

之前说过买了本小册,在小册的讨论组中有人提出了new Promise的RESOLVEPromise.resolve会有不同的执行效果。一时不明白,后在stackoverflow上搜到了相关问题。举例:

1
2
3
4
5
6
7
8
9
10
const p = new Promise(resolve => resolve('author is maczyt'));

new Promise(resolve => {
resolve(p)
}).then(() => {
console.log(1);
});
Promise.resolve(p).then(() => {
console.log(2);
});

一开始我按照微任务的添加顺序得到答案应该是 1、2, 但通过执行得到的答案是 2、1

但是让我们看看下面的例子:

1
2
3
4
5
6
7
8
9
10
const p = 'author is maczyt'; // p不是promise对象

new Promise(resolve => {
resolve(p)
}).then(() => {
console.log(1);
});
Promise.resolve(p).then(() => {
console.log(2);
});

大家猜猜这个输出顺序又是什么? // 答案为: 1、2
可以看出这个是按照微任务的执行顺序执行的。

为何执行效果会刚好相反呢? 作为志向进入某爸爸公司的我,当然得知其然而知其所以然。😁

大家请往下看。

继续阅读全文 »

JS基础知识梳理(一)

最近花了点小钱买了本《前端面试之道》小册,目前刚看完JS基础知识部分,感觉挺不错的,收获挺多。由于是作者收集+个人积累所总结的知识,读后确实很有收获,但是毕竟是他人经验,时间一久,总是容易忘记。所以打算记录下来,毕竟好记性不如烂键盘,😄。

继续阅读全文 »

JS中Deep Clone的几种方式

在某些业务中,我们为了不修改原来的数组或对象,我们基本会选择复制一份,进行处理。

对于数组,我们会使用 [].concat(arr), arr.slice(0)等方法来进行复制
对于对象,我们会使用Object.assign({}, obj), {...obj}等方法进行复制处理.

但上面都是浅拷贝,如果数组或对象中的元素是简单类型,那这样不会有问题,如果是复杂类型呢?

继续阅读全文 »