JS问题整理与思考--什么是单线程,和异步有什么关系

  • 单线程:只有一个线程,同一时间只能做一件事
  • 原因:避免DOM渲染的冲突
  • 解决方案-异步

单线程:只有一个线程,同一时间只能做一件事

var i, sum=0;
for(i=0;i<100000;i++){
    sum +=i;
}
console.log(sum)

// alert不处理,JS执行和DOM渲染暂时卡顿
console.log(1)
alert(1)
console.log(2)

原因:避免DOM渲染的冲突

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

解决方案-异步

console.log(100)
setTimeout(function () {
    console.log(200)
},1000)
console.log(300)
console.log(400)

console.log(100)
$.ajax({
    url:'XXX',
    success:function (res) {
        console.log(res)
    }
})
console.log(300)
console.log(400)

异步的问题

  • 问题一:没按照书写方式执行,可读性差
  • 问题二:callBack中不容易模块化

随机浏览