概述
- JavaScript是单线程模式,因为不能同时对DOM进行操作,比如一个线程修改一个DOM,同时另外一个线程也修改这个DOM,则浏览器会无法分辨到底执行哪个线程;
- 单线程模式优点:更安全、简单;
- 单线程模式缺点:如果某块代码有问题或运行时间非常长,会造成阻塞,导致页面性能下降、卡顿
- JavaScript任务的执行模式:
- 同步模式
执行顺序与代码的编写顺序是一致的,执行完后才会往后走 - 异步模式
解决单线程的JavaScript语言无法同时处理大量耗时任务
代码执行顺序混乱,不好理解
JavaScript是单线程的,但是浏览器(执行JavaScript的内部API)不是单线程的
- 同步模式
- 回调函数callback--所有异步编程方案的根基 由调用者定义,交给执行者执行的函数 其它实现异步调用的方式:发布订阅、事件监听等
function foo (callback) {
setTimeout(function () {
callback()
}, 3000)
}
foo(function () {
console.log('这就是一个回调函数')
console.log('调用者定义这个函数,执行者执行这个函数')
console.log('其实就是调用者告诉执行者异步任务结束后应该做什么')
})
// 回调地狱,只是示例,不能运行
$.get('/url1', function (data1) {
$.get('/url2', data1, function (data2) {
$.get('/url3', data2, function (data3) {
$.get('/url4', data3, function (data4) {
$.get('/url5', data4, function (data5) {
$.get('/url6', data5, function (data6) {
$.get('/url7', data6, function (data7) {
// 略微夸张了一点点
})
})
})
})
})
})
})