面试大纲: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')潜在问题:
- 没按照书写方式执行,回调,可读性差
- callback中不容易模块化
