JS的EventLoop事件循环

相信前端的小伙伴都或多或少的了解过EventLoop这个概念,但可能很多人并没有去深入学习过这个概念,我也一样。在这次失业找工作的过程中,面试官提出来一个问题是PromisesetTimeout的执行顺序问题,由于之前看到过相关问题所以知道是Promise先执行的,但是当面试官询问其原理时便一无所知了,所以在面试之后查阅了一些资料以及其他前辈的一些博客,对EventLoop有了一些基础的了解,纪录在此,用写给别人看的方式逼迫自己好好理解这个概念,争取做到知其然知其所以然。

阅读更多

JavaScript的防抖和节流

在引入防抖和节流之前,给出一个需求,需要我们监视浏览器的滚动事件,返回滚动条与顶部的距离,我们很容易能写出这样的代码:

1
2
3
4
5
6
function showTop(){
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop
console.log('滚动条距离顶部的距离:' + scroolTop)
}
// 绑定事件
window.onscroll = showTop

但是这样真的可行不?答案是可行但不太合适,因为这个函数的运行频率实在是太高了,只要滚动会一直触发,把浏览器的性能浪费在这里肯定是不合适的。

由此我们引出防抖和节流这两个概念。

阅读更多

Javascript的数组去重

数组去重

数组去重的方法是面试中的常见问题,下面总结了一些自己用过的以及其他前辈分享的去重方法,如有侵扰烦请联系删除。

阅读更多

Javascript的深浅拷贝

基本数据类型与引用数据类型

在讨论深浅拷贝之前,我们需要先说一下基本数据类型引用数据类型

  • 基本数据类型:直接存储在栈中的数据
  • 引用数据类型:存储的是该对象在栈中的引用,真实数据存放在堆内存中。

因为基本数据类型每次复制都会在栈中新开辟一块内存存放值,所以基本数据类型并不会涉及到深浅拷贝,接下来关于深浅拷贝到讨论仅针对于像ObjectArray这样的引用数据类型。

阅读更多