发表于: 2019-11-30 22:35:52

1 1086


今天完成的事:

复习

明天计划的事:

复习

遇到的问题:

暂无

收获:

ES6

箭头函数

箭头函数与普通函数的区别:

  • 箭头函数没有arguments(用剩余运算符替代)
  • 箭头函数没有prototype,不能作为构造函数(不能用new关键字调用)
  • 箭头函数没有自己的this,引用的是外层执行上下文的this

扩展运算符

  • 可将类数组转为真正的数组
let nodeList = document.querySelectorAll('div') let arr=[...nodeList] 复制代码
  • 合并多个数组
let arr1=[1,2,3] let arr2=[4,5,6] let arr3=[...arr1, ...arr2] 复制代码

for...of循环

for-of与for-in的区别

  • for-of遍历获取的是对象的键值,for-in获取的是键名
  • for-in会遍历对象的整个原型链,性能差,for...of只遍历当前对象不会遍历原型链
  • 对于数组的遍历,for-in会遍历所有可枚举属性(包括原型链),for...of只返回数组下标所对应的属性值

for...of的原理

利用了遍历对象内部的iterator接口,将for...of循环分解为最原始的for循环

对promise的理解,分别有什么优缺点?什么是Promise链?Promise构造函数执行和then函数执行有什么区别?

  • Promise有三种状态:pending等待中,resolved完成,rejected拒绝 且一旦从等待状态变为其他状态就不能再次改变
  • 构造Promise时,构造函数内部的代码是立即执行的。
  • Promise实现了链式调用即每次调用then之后返回的都是一个全新的Promise,如果在then中使用return,那么return的值会被Promise.resolve()包装

你理解的Generator是什么?

Generator可以控制函数的执行

function *foo(x){ let y=2*(yield(x+1)) let z=yield(y/3) return (x+y+z) } let it=foo(5) it.next() // {value:6,done:false} it.next(12) it.next(13) 复制代码

Generator函数调用会返回一个迭代器,第一次next,函数停在yield(x+1)所以value=5+1=6; 第二次next,传入参数相当于上一个yield的值,即let y=2*12=24; let z=24/3=8;第三次next,传入参数相当于上一个yield的值,即let z=13,y=24,x=5,相加返回42

async,await相比于promise的优势

  • 优势在于处理then的调用链,能够更清晰准确的写出代码
  • 缺点:await将异步代码改造成同步,如果多个异步代码之间没有依赖性却使用了await会导致性能降低

对async,await的理解,内部原理

async就是将函数返回值使用Promise.resolve()包裹一下,和then中处理返回值一样,并且async只能搭配await使用 await其实就是generator加上Promise的语法糖,且内部实现了自动执行generator

setTimeout,setInterval,requestAnimationFrame各有什么特点?

setTimeout延后执行,setInterval每隔一段时间执行一次回调函数,以上两种都不能保证在预期时间执行任务 requestAnimationFrame自带函数节流功能,且延时效果是精确的


线程和进程的区别

进程描述了CPU在运行指令及加载和保存上下文所需的事件,线程是更小的单位,秒速了执行一段指令所需的时间

JS单线程带来的好处

因为js可以修改DOM,如果JS执行的过程UI线程还在工作会导致不能不能安全的渲染UI。 JS单线程运行,可以达到节省内存,节约上下文切换时间,没有锁的问题

什么是执行栈

执行栈存放函数调用的栈结构,遵循先进后出的原则。 从底部开始放进去执行栈,然后从栈顶取出执行

微任务与宏任务

不同的任务源会被分配到不同task队列中,任务源可以分为微任务(microtask)和宏任务(macrotask) 微任务包括process.nextTick, promise, MutationObserver 宏任务包括script,setTimeout,setInterval,setImmediate,I/O,UI rendering

EventLoop执行顺序

1.首先执行同步代码,这属于宏任务 2.当执行完所有同步代码后,执行栈为空,查询是否有异步代码需要执行 3.执行所有微任务 4.当执行完所有微任务后,如有必要会渲染页面 5.然后开始下一轮EventLoop,执行宏任务中的异步代码,也就是setTimeout中的回调函数

Proxy

Vue3.0其中一个核心功能就是使用Proxy替代Object.defineProperty Proxy可以在目标对象前架设一个拦截器,一般Reflect搭配,前者拦截对象,后者返回拦截的结果

Object.defineProperty的不足

1.无法探测到对象根属性的添加和删除 2.无法探测到对数组基于下标的修改 3.无法探测到.length修改的监测





返回列表 返回列表
评论

    分享到