美团面试

  • 事件循环

浏览器中, js引擎线程会循环从 任务队列 中读取事件并且执行, 这种运行机制称作 Event Loop (事件循环).

每个浏览器环境,至多有一个event loop。 一个event loop可以有1个或多个task queue(任务队列)

先执行同步的代码,然后js会跑去消息队列中执行异步的代码,异步完成后,再轮到回调函数,然后是去下个事件循环中执行setTimeout

它从script(整体代码)开始第一次循环。之后全局上下文进入函数调用栈。直到调用栈清空(只剩全局),然后执行所有的micro-task。当所有可执行的micro-task执行完毕之后。循环再次从macro-task开始,找到其中一个任务队列执行完毕,然后再执行所有的micro-task,这样一直循环下去。

从规范上来讲,setTimeout有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调。而Promise的异步没有这个问题。Promise所在的那个异步队列优先级要高一些 Promise是异步的,是指他的then()和catch()方法,Promise本身还是同步的 Promise的任务会在当前事件循环末尾中执行,而setTimeout中的任务是在下一次事件循环执行

//依次输出 12354
setTimeout(function(){
  console.log(4)
  },0);
new Promise(function(resolve){
  console.log(1)
  for( var i=0 ; i<10000 ; i++ ){
    i===9999 && resolve()
  }
  console.log(2)
}).then(function(){
  console.log(5)
});
console.log(3);
  • xss和csrf
  • 事件捕获的应用
  • jsx的优点
  • webpack loader和plugin区别
  • 性能优化
  • react和vue的区别
  • vue component和指令的区别
  • vue组件通信
  • box-sizing
  • jsonp缺点,为什么不能用POST
  • vue-router的实现原理
  • es6用了哪些新特性
  • cookie和localStorage区别
  • git fetch是干嘛的
  • 事件代理和冒泡,捕获
  • 304是干嘛的 具体,405 504又是干嘛的
  • BFC
  • 其他(自我介绍,为啥离职,为啥从美团离职,git工作流,code review,单元测试)
  • react组件生命周期
  • 伪类和伪元素的区别 CSS 伪类:逻辑上存在但在文档树中却无须标识的“幽灵”分类 CSS 伪元素(:first-letter,:first-line,:after,:before)代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。 CSS3标准要求伪元素使用双冒号
  • em和rem

results matching ""

    No results matching ""