Skip to content

面试大纲:01单线程和异步

单线程

只有一个线程,同一时间只能关注一件事

js
// 循环运行期间,JS执行和DOM渲染暂时卡顿
var i, sum = 0
for (i = 0; i < 1000000000; i++) {
  sum += i
}
// 卡顿
console.log(sum)
// alert不处理,JS执行和DOM渲染暂时卡顿
console.log(1)
alert('hello')
console.log(2)

原因:避免DOM渲染的冲突

浏览器需要渲染DOM JS可以修改DOM结构 JS执行时,浏览器DOM渲染会暂停 两段JS不能同时执行(都修改DOM就冲突了) webworker支持多线程,但是不能访问DOM

解决方案:异步

js
console.log('1')
setTimeout(function() {
  console.log('3')
  var i, sum = 0
  for (i = 0; i < 1000000000; i++) {
    sum += i
  }
  console.log('4', sum)
}, 2000)
console.log('2')

潜在问题:

  1. 没按照书写方式执行,回调,可读性差
  2. callback中不容易模块化

共 20 个模块,1301 篇 Markdown 文档。