一、单线程和异步
- JS是单线程语言,只能做一件事;
- 浏览器和nodejs已支持JS启动进程,如 web worer;
- JS和DOM渲染共用同一个线程,因为JS可修改DOM结构;
- 遇到等待(网络请求,定时任务)不能卡住;
- 需要异步;
- 回调callback函数形式
阅读我的另一篇文章,更加详细。
// 异步 callback 回调函数
console.log(100)
setTimeout(() => {
console.log(200)
}, 1000)
console.log(300)
console.log(400)
如果是同步呢,就会卡住,比如
打印出100,然后alert出200,卡住,点ok之后,300才打印出来。alert的时候,浏览器不会继续渲染,js也不会继续执行。---【这就是 同步】
- JS是单线程语言
- 异步不会阻塞代码执行
- 同步会阻塞代码执行
二、应用场景
- 网络请求,如ajax图片加载等
- 定时任务,如setTimeout
console.log('start')
$.get('./data.json', function(data) { console.log(data) })
console.log('end')
console.log('start')
let img = document.createElement('img')
img.load = function() { console.log('loaded') }
img.src = '/xxx.png'
console.log('end')
三、promise