面试中最全的手写JS题

1、手写实现防抖和节流

1.1 实现防抖函数
防抖函数原理:把触发非常频繁的事件合并成一次去执行 在指定时间内只执行一次回调函数,如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算
在这里插入图片描述
1.2 实现节流函数
节流函数原理: 指频繁触发事件时,只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数。
在这里插入图片描述

2、手写深拷贝

调用深拷贝方法,若属性为值类型,则直接返回;若属性为引用类型,则递归遍历。这就是我们在解这一类题时的核心的方法。
在这里插入图片描述

3、手写实现call方法

call做了什么
1、将函数设为对象的属性
2、执行和删除这个函数
3、指定this到函数并传入给定参数执行函数
4、如果不传入参数,默认指向为 window
在这里插入图片描述

4 手写apply方法

在这里插入图片描述

5、手写forEach方法

在这里插入图片描述

6、手写filter方法

在这里插入图片描述

7、手写reduce方法

在这里插入图片描述

8 查找字符串中出现最多的字符和个数

在这里插入图片描述

9 冒泡排序

冒泡排序的原理如下,从第一个元素开始,把当前元素和下一个索引元素进行比较。如果当前元素大,那么就交换位置,重复操作直到比较到最后一个元素,那么此时最后一个元素就是该数组中最大的数。下一轮重复以上操作,但是此时最后一个元素已经是最大数了,所以不需要再比较最后一个元素,只需要比较到 length - 1 的位置
在这里插入图片描述

10 快速排序

快排的原理如下。随机选取一个数组中的值作为基准值,从左至右取值与基准值对比大小。比基准值小的放数组左边,大的放右边,对比完成后将基准值和第一个比基准值大的值交换位置。然后将数组以基准值的位置分为两部分,继续递归以上操作
在这里插入图片描述

11 插入排序

在这里插入图片描述

12 对象扁平化

在这里插入图片描述

13、手写发布订阅模式

创建一个对象
on方法用来把回调函数fn都加到缓存列表中
emit 根据key值去执行对应缓存列表中的函数
off方法可以根据key值取消订阅
在这里插入图片描述

14、手写Ajax

创建 XMLHttpRequest 实例
发出 HTTP 请求
服务器返回 XML 格式的字符串
JS 解析 XML,并更新局部页面
不过随着历史进程的推进,XML 已经被淘汰,取而代之的是 JSON。
在这里插入图片描述

15、数组去重

在这里插入图片描述

16、实现new的过程

new操作符做了这些事:
创建一个全新的对象
这个对象的__proto__要指向构造函数的原型prototype
执行构造函数,使用 call/apply 改变 this 的指向
返回值为object类型则作为new方法的返回值返回,否则返回上述全新对象
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/longxiaobao123/article/details/134049975