js 是同步的語言;執(zhí)行順序是沖上往下的
? ? ? ? 回調(diào)函數(shù)是異步的儡率。
? ? ? ? 代碼的執(zhí)行順序分為:同步 異步
? ? ? ? 同步 弊端:會發(fā)生執(zhí)行阻塞
? ? ? ? 異步不會發(fā)生阻塞,
? ? ? ? 異步:未來某一時刻需要執(zhí)行的代碼食寡,優(yōu)先執(zhí)行熄捍,同步是按照代碼的編寫順序從上往下執(zhí)行烛恤,異步不會等待其他代碼執(zhí)行,所有的代碼余耽,誰快誰先執(zhí)行
? ? ? ? js中異步
? ? ? ? 回調(diào)函數(shù)(ES5)? promise對象(ES6)? async await (ES7)
? ? ? ? 回調(diào)函數(shù):
? ? ? ? 優(yōu)點:異步處理程序
? ? ? ? 缺點:容易形成毀掉地獄缚柏,代碼讓人看不懂
? ? ? ? promise對象解決【回調(diào)地獄】問題? 弊端:.then .then 鏈式結(jié)構(gòu)很惡心
? ? ? ? 推薦: async await? 【同步寫法異步程序,離不開promise? 因為await會后必須是promise對象】
? ? ? 回調(diào)函數(shù):一個定義的函數(shù)碟贾,作為另一個函數(shù)的實參傳入到另一個函數(shù)中
? ? ? ? 回調(diào)函數(shù)執(zhí)行:
? ? ? ?? 自動執(zhí)行: 針對一些內(nèi)置的API 自動觸發(fā) 例如? sort
? ? ? ?? 手動執(zhí)行: 自定義的函數(shù)傳入的回調(diào)函數(shù)需要我們自己 寫 xxx() 觸發(fā)
? ? ??
? ? ? ?? 回調(diào)函數(shù)學(xué)習(xí)注意事項
? ? ? ?? 1:將來看到代碼币喧,【形參名字()】 ----> 該形參接受實參為【函數(shù)】---回調(diào)函數(shù)
? ? ? ?? 2:注意形參的名字與實參的名字不是一個, 相當于將 實參【函數(shù)名】重新賦值給【形參callback】--->形參callback 的值為定義的函數(shù),【等待執(zhí)行】
? ? ? ?? 3:第一步首先要知道 形參接受的是【哪個函數(shù)】--->才能知道執(zhí)行了哪個回調(diào)函數(shù)
? ? ? ??? ------> 方式一:通過找到實參袱耽,找到形參接受的函數(shù)
? ? ? ?? ------> 方式二:通過方法體打印形參杀餐,知道接受的是哪個函數(shù);--->知道觸發(fā)是哪個函數(shù)
? ? ? ?? 4:回調(diào)函數(shù)在執(zhí)行時候朱巨,也可以傳入實參史翘,按照上面的順序,找實參找函數(shù)/變量冀续,看至執(zhí)行
? ? ? ?? 5:不要糾結(jié)執(zhí)行順序問題琼讽,只要會找傳入的函數(shù)就可以了。
? ?
? ? ? ?? 異步學(xué)習(xí)方法
? ? ? ?? 1: 異步是什么時候開始的?
? ? ? ? 2: 異步執(zhí)行完畢時候沥阳;是如何告訴外界的
? ? ? ? 3:外界接收到信號后跨琳,做什么
? ? ?
1:當函數(shù)作為實參傳入時---》決定了【異步程序】
2:異步執(zhí)行完畢時候;是如何告訴外界的
3:當回調(diào)函數(shù)方法體代碼執(zhí)行完畢或者有【返回值】時---》異步執(zhí)行完畢
4:外界只要接受到【返回結(jié)果】 或者執(zhí)行完畢效果---》【外界已經(jīng)知道異步執(zhí)行完畢】
5:異步執(zhí)行完畢后桐罕,外界開始處理其他業(yè)務(wù)
? ? ? ? init(fn, a, c, call)
? ? ? ? function fn(callback) {
? ? ? ? ? ? // 執(zhí)行回調(diào)函數(shù)? 形參名字()
? ? ? ? ? ? callback()? //在這里 call作為
? ? ? ? ? ? // call() //區(qū)別:在執(zhí)行fn 函數(shù)脉让,調(diào)用外部函數(shù)call
? ? ? ? ? ? console.log("我是一個函數(shù)")
? ? ? ? }
? ? ? ? function call(callback) {
? ? ? ? ? ? console.log("我是一個回調(diào)函數(shù)")
? ? ? ? }
? ? ? ? function a(callback) {
? ? ? ? ? ? console.log('111111')
? ? ? ? }
? ? ? ? var c = function (callback) {
? ? ? ? ? ? console.log('222222')
? ? ? ? }
? ? ? ? function init(callback1, callback2, callback3, callback4) {
? ? ? ? ? ? console.log("初始化")
? ? ? ? ? ? callback1(a)
? ? ? ? ? ? callback2()
? ? ? ? ? ? callback3()
? ? ? ? ? ? callback4()
? ? ? ? ? ? console.log(callback4)
? ? ? ? }