前言
在前端面试有一个非常重要的环节,也是面试者最担心的一个环节。对“手撕代码”的考察需要面试者平时总结和积累(临时抱佛脚是不好使的),在这里笔者就自己如何攻破“手撕代码”环节总结了一些经验,希望能帮助你挑战高薪,迎娶白富美😄😄😄。
- 使用IDE时尽量避免直接使用提示API,亲自输入(孰能生巧,当然感觉没问题的API就不用浪费时间了)
- 遇到不熟悉的API,一定要查文档研究清楚(参数个数和具体意义以及返回值)
- 如在模拟某个原生API时,先写出原生API并分析出形参和返回值
- 感觉功能完成时,需要在考虑一下边界条件(参数非比填情况、undefined、null)
- 平常有空时多刷刷一二线大厂的面试题(扩充自己的知识广度)
- 多关照一些前端动态(比如说curry、compose你没听过,这就有点尴尬)
常见的“手撕代码”,都是高频题哦
curry(柯里化)
|
|
compose(函数组合)
|
|
pipe(函数管道)
|
|
throttle(函数节流)
|
|
debounce(函数防抖)
|
|
formatMoney(千分位)
|
|
deepClone(深拷贝)
说明:通过new WeakMap()来避免循环引用(拷贝引用类型时并保存其地址,后面遇到引用类型先检查是否已经保存了)
通过Reflect.ownKeys(obj)遍历出obj自身的所有可枚举和不可枚举的属性以及symbol属性
拷贝对应属性的属性描述符
模拟instanceof
|
|
实现call方法
|
|
实现apply方法
|
|
实现bind方法
|
|
模拟Promise.all(多个Promise并行执行)
目前还存在参数适配的问题
多个Promise串行执行(两种方式)
|
|
写在后面
上面代码完全是笔者手敲,难免有错误,还望斧正。这种题目还有很多(实现简易版的EventEmitter、简易版模版引擎等),笔者会持续更新。如果对你有帮助,俺希望送上你的github小星星,在此感谢。
本文同步发布于个人博客掘金知乎专栏