面试中的一些手写代码
文章目录
手写call、apply、bind函数
call实现
|
|
apply实现
|
|
bind实现
|
|
new
- 用new Object() 的方式新建了一个对象 obj
- 取出第一个参数,就是我们要传入的构造函数。此外因为 shift 会修改原数组,所以 arguments 会被去除第一个参数
- 将 obj 的原型指向构造函数,这样 obj 就可以访问到构造函数原型中的属性
- 使用 apply,改变构造函数 this 的指向到新建的对象,这样 obj 就可以访问到构造函数中的属性
- 判断返回的值是不是一个对象,如果是一个对象,我们就返回这个对象,如果没有,我们该返回什么就返回什么
|
|
instanceof
|
|
jsonp
|
|
ajax
|
|
…扩展运算符
rest参数
的形式为 ...变量名
用于获取函数调用时传入的参数. 顾名思义, rest参数表示的是除了明确指定的参数外,剩下的参数的集合, 它的类型是Array
|
|
|
|
spread运算符 … 扩展运算符 …可以用于 数组的构造,也可以用于调用函数时,将一个数组用作函数参数(就是把这个数组转化为参数的列表,所以也就成了一个函数的参数)
|
|
|
|
|
|
|
|
深度克隆函数
|
|
promise
|
|
敏感词标记
|
|
实现字符串反转
|
|
实现数组随机排序
|
|
取出数组中的最大值
|
|
实现lazyman
|
|
实现flattenDeep
将输入[1,[2,[3,4]],5]转换成一维数组[1,2,3,4,5]
|
|
格式化数字,三个一组,逗号分隔
用零宽正则实现
|
|
其实还有更简单的方法
|
|
手写一个函数实现斐波那契数列
|
|
防抖与节流
防抖定义:多次触发事件后,事件处理函数只执行一次,并且是在触发操作结束时执行。
防抖原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。
节流定义:触发函数事件后,短时间间隔内无法连续调用,只有上一次函数执行后,过了规定的时间间隔,才能进行下一次的函数调用。
节流原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。
|
|
js柯里化
|
|
冒泡排序
|
|
快速排序
|
|