JS

类型判断
typeof: new Number(1) / NaN / [ ] / 正则 / document.all link
判断是数组的几种方法 link

闭包的原理
闭包怎么形成

实现一个可以统计调用次数的装饰器

ES6模块输出的值
与commonjs的对比

V8垃圾清理机制

数组去重的多种实现思路

关于var let const

  1. var x = 20
  2. function f(){
  3. console.log(x)
  4. var x = 10
  5. }

Promise.race( ) vs Promise.any( )

Promise中的异常处理:
Promise内部的异常?
then中抛出的异常?
async函数中的异常

手写debounce link
手写throttle
手写各种..
https://jinlong.github.io/2016/04/24/Debouncing-and-Throttling-Explained-Through-Examples/

实现深拷贝
对数组/对象/函数/循环引用的处理

用 JSON.parse(JSON.strstringify()) 进行深拷贝可能存在的问题
不能处理循环引用和函数
不支持NaN,Infinity,甚至精确的浮点数
Maps, Sets, RegExps, Dates, ArrayBuffers和其他内置对象序列化可能存在问题

  1. var x = {}
  2. var y = {x}
  3. x.y = y
  4. var copy = JSON.parse(JSON.stringify(x))
  1. // 处理循环引用 https://github.com/youzpan/blog/issues/4
  2. var handleCircular = function() {
  3. var cache = [];
  4. var keyCache = []
  5. return function(key, value) {
  6. if (typeof value === 'object' && value !== null) {
  7. var index = cache.indexOf(value);
  8. if (index !== -1) {
  9. return '[Circular ' + keyCache[index] + ']';
  10. }
  11. cache.push(value);
  12. keyCache.push(key || 'root');
  13. }
  14. return value;
  15. }
  16. }
  17. var tmp = JSON.stringify;
  18. JSON.stringify = function(value, replacer, space) {
  19. replacer = replacer || handleCircular();
  20. return tmp(value, replacer, space);
  21. }

事件循环
浏览器与Node事件循环的区别

CSS

rem 移动端如何适配, 如何确定rem的值

一个display: flex的容器下三个元素, 一个设了flex:1, 另两个没设, 是什么结果
flex-grow flex-shrink 的空间分配机制

HTML

HTML 加载过程
script标签阻塞加载 async defer
DOMContentLoaded, load, beforeunload, unload
async 与 DOMContentLoaded