文档持续更新(问题及答案)
基础
-
数据结构
-
JS堆栈的作用
-
作用域链的理解
- 变量提升、函数提升、浏览器解析机制
- 定义一个变量当删除这个变量做了什么
- 进程与线程、什么是单线程?和异步有何关系
- 理解MVVM、MVC
- 理解AMD、commonjs
- 虚拟内存及缓冲区溢出
- null和undefined的区别
- ajax/axios/fetch的区别
- Promise的原理
- instanceof的原理
- typeof的原理
- 数组的扁平化
- xhr对象
- ES6 Proxy的概念
- 闭包?运行时上下文里面包括什么?
- 三栏布局
- BFC布局原理
对象/原型链/类/继承
- new本质
- 理解this
- 介绍下原型链
- 理解构造函数下的prototype属性和实例化对象的__proto__属性的联系
- Class与原型的关系
- class类与继承、super()/class与原形链实现继承
- Object.create/Object assign原理
- 为什么Class 中constructor里面定义的属性是对象本身的属性?
事件
- even loop事件循环
- js事件流/事件节流
- js如何处理防抖和节流
- 事件委托以及优缺点
- 回流/重绘
浏览器相关
- 在地址栏输入url到最终展示界面期间发生了什么
- http、https的区别
- 同源策略、跨域及原理
- 缓存及更新问题
- 新一代的前端存储方案--indexedDB
- webview与原生应用交互
DOM
- 获取DOM节点的几个方法
- 如何给DOM节点上添加事件
服务器端知识
实现
- 函数柯里化
- 冒泡排序的复杂度是多少?快排呢
- 如何实现快排?
- 如何实现二分查找?(迭代版和递归版,问那个效率高一些)
- JavaScript递归转循环?
- 如何用原生JS实现一个队列
- 如何实现一个栈
- 如何实现一个同花顺?写代码如何实现?(七张牌同一花色并且数字相连)
- 数组 flat、去重及排序
- 设计异步清空队列
- 手写设计模式
- 手写call
- 手写bind
- 手写apply
- 手写promise
- 手写instanceof
- 手写typeof
- 手写Object.create
- 手写Object.assign()
- 手写防抖
- 手写节流