JavaScript
学习资料
网站
- JavaScript - MDN
- ES6 入门教程 - 阮一峰
- GeeksforGeeks - 英文网站
- w3schools - 英文网站
博客/GitHub
- 木易杨前端进阶 - 博客
- 前端瓶子君 - GitHub
- 冴羽 - GitHub
- LinYIYI文章 - 掘金
- WindrunnerMax - GitHub
面试相关
- 前端面试题宝典 - 网站
- 年后被吊打的第一面 - 掘金
- 「历时 8 个月」10 万字前端知识体系总结(基础知识篇) - 掘金
- 2022 年我的面试万字总结(代码篇) - 掘金
- 前端劝退之前端知识体系(前端面试体系) - 掘金
- 2020 年前端面试复习必读精选文章【赠复习导图】 - GitHub
- JavaScript基础知识总结 - 掘金
- 最火大厂面试题、面试技巧汇总及简历编写(附简历模版下载) - 微信公众号文章 - 21年
- 一位前端小姐姐的五万字面试宝典 - 掘金 - 20年
- 每周前端面试专栏 - 掘金 - 20年
题目
- 155 道输出结果题 - GitHub
- 44 道 JS 难题,做对一半就是高手 - 微信公众号文章
类型判断、深浅克隆
原型、原型链、继承
作用域、闭包
this
Promise
浏览器工作原理
节流、防抖
DOM事件流
事件流的都会经过三个阶段: 捕获阶段 -> 目标阶段 -> 冒泡阶段。
- 捕获是指事件从最顶层的元素(通常是document对象)开始,然后向下传播到目标元素。
- 冒泡是从目标元素开始,然后向上传播到DOM树中更高的层次,直到达到最顶层的元素(通常是document对象)。
大多数浏览器都会先执行捕获阶段,然后是冒泡阶段,但除非你明确指定了使用捕获(通过设置事件监听器的第三个参数为true),否则事件监听器默认是在冒泡阶段执行的。
addEventListener(eventType, handler, useCapture)
事件委托/代理
事件委托,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,而不是目标元素。
当我们想在用户与大量的子元素中的任何一个互动时运行一些代码时,我们在它们的父元素上设置事件监听器,让发生在它们身上的事件冒泡到它们的父元素上,而不必在每个子元素上单独设置事件监听器。
错误类型
- Error - MDN
- JavaScript 错误参考 - MDN
- JavaScript错误处理完整指南 - 微信公众号文章
类型:
- Error:基础通用的构造函数
- EvalError:与 eval() 有关
- RangeError:数值变量或参数超出其有效范围
- ReferenceError:无效引用
- SyntaxError:语法错误
- TypeError:变量或参数不属于有效类型
- URIError:给 encodeURI() 或 decodeURI() 传递的参数无效
尾调用和尾递归
尾调用,就是指某个函数的最后一步是调用另一个函数。
只要有别的操作,就不属于尾调用。
函数调用自身,称为递归。
如果尾调用自身,就称为尾递归。
- 尾调用优化 - 阮一峰
函数式编程
- 函数式编程初探 - 阮一峰
- 深入理解函数式编程(上) - 美团技术团队 - 网站
- 深入理解函数式编程(下) - 美团技术团队 - 网站
- 说说你对函数式编程的理解,以及优缺点? - 前端面试题宝典
纯函数
- 相同的输入总是产生相同的输出
- 函数对外部状态没有依赖,也不会改变外部状态
- 函数不会修改传入的参数,而是返回一个新的值,保持输入参数的不可变性
- 函数的执行过程对于调用者来说是透明的,即调用者不需要了解函数的内部实现细节,只需要关注输入和输出
高阶函数
至少满足一个条件的函数:
- 接受一个或多个函数作为输入
- 输出一个函数
柯里化
接收一部分参数,返回一个函数接收剩余参数,接收足够参数后,执行原函数
面试手写题
收藏文章
- 就因为 JSON.stringify ,我的年终奖差点打水漂了 - 微信公众号文章
- 面试官:有了 for 循环 为什么还要 forEach? - 掘金
- 为什么 Proxy 一定要配合 Reflect 使用? - 掘金
- 聊聊JS的二进制家族:Blob、ArrayBuffer和Buffer - 微信公众号文章
- 字节面试:如何实现准时的setTimeout - 微信公众号文章