1.宏任務(wù)和微任務(wù)
- 宏任務(wù):宏任務(wù)隊列可以有多個
setTimeout() , setInterval , script , requestAnimationFrame,setImmediate, I/O, UI rendering;
- 微任務(wù):微任務(wù)隊列只能有一個
Promise , process.nextTick ,MutationObserver ,Object.observer
首先先總結(jié)一下異步函數(shù)的執(zhí)行過程:
同步和異步分別進(jìn)入不同的執(zhí)行場所,同步的進(jìn)入主線程,異步的進(jìn)入Event table并注冊函數(shù)。 當(dāng)(指定的事情)注冊函數(shù)完成時,Event table會將這個函數(shù)移入Event queue。 主線程內(nèi)的任務(wù)執(zhí)行完畢為空,會去Event queue讀取一個對應(yīng)的函數(shù),進(jìn)入主線程執(zhí)行,執(zhí)行完之后再去event queue里面去對應(yīng)的函數(shù)再進(jìn)入主線程執(zhí)行。上述過程會不斷的重復(fù),也就是Event loop(事件循環(huán))
但是js異步還有一個機(jī)制,就是遇到宏任務(wù),先執(zhí)行宏任務(wù),將宏任務(wù)放入event queue里面,然后再執(zhí)行微任務(wù),將微任務(wù)放如event queue里面,最騷的是,這兩個event queue不是同一個,當(dāng)你往外面拿的時候,先從微任務(wù)里面的event queue拿回調(diào)函數(shù)來執(zhí)行,然后再從宏任務(wù)里面的event queue拿回調(diào)函數(shù)。
也就是說,先執(zhí)行所有微任務(wù),微任務(wù)執(zhí)行完為空之后再執(zhí)行宏任務(wù)。
2.promise的方法 :狀態(tài) pending 觸發(fā) Fulfilled , Rejected
- promise.all() 的實現(xiàn)原理;
- Promise.race()
- Promise.resolve()
- Promise.reject()
- Promise.try()
- Promise.prototype.then()
- Promise.prototype.catch()
- Promise.prototype.finally()
3.event.loop:事件循環(huán)
4.new Set(); //set對象
- [..new Set(arr)];
5.預(yù)編譯
6.強制類型轉(zhuǎn)換
- String()
- Number()
- Object()
7.隱式類型轉(zhuǎn)換
- ++,-- ,+-/*,< > <= >= ,== !,
- 不發(fā)生類型轉(zhuǎn)換:=== !== ,(undefined == null) //true
8.路由的實現(xiàn)原理:
- URL中的hash:
- #號代表網(wǎng)頁中的一個位置。其右面的字符就是該位置的標(biāo)識符。
- HTTP請求不包括'#':#是用來指導(dǎo)瀏覽器動作的,對服務(wù)器端完全無用。
- #后的字符:都會被瀏覽器解讀為位置
- 改變#不觸發(fā)網(wǎng)頁重載
- 改變#會改變?yōu)g覽器的訪問歷史
- window.location.hash讀取#值
- onhashchange事件: 當(dāng)#值發(fā)生改變時就會觸發(fā)這個事件。
9.預(yù)加載和懶加載的概念
- 預(yù)加載: 提前加載圖片,當(dāng)用戶需要查看時可直接從本地緩存中渲染。
- 圖片等靜態(tài)資源在使用前的提前請求。
- 資源后續(xù)使用時可以從緩存中加載,提升用戶體驗。
- 頁面展示的依賴關(guān)系維護(hù)(必須的而資源加載完才可以展示頁面,防止白屏等)
實現(xiàn)的方式:如用css和js實現(xiàn)預(yù)加載;僅用js實現(xiàn)預(yù)加載; 使用ajax實現(xiàn)預(yù)加載。
1.html中img標(biāo)簽最初設(shè)置為display:none;
2.js腳本中使用Image對象動態(tài)創(chuàng)建好圖片;使用onload方法
3.使用XMLHttpRequest對象可以更加精細(xì)的控制預(yù)加載過程,缺點是無法跨域;
- 懶加載也叫延遲加載: JS圖片延遲加載,延遲加載圖片或符合某些條件時才加載圖片。
- 優(yōu)點:頁面加載速度快、可以減輕服務(wù)器的壓力、節(jié)約了流量,用戶體驗好。
懶加載的實現(xiàn)方式有:注意不要將圖片地址放在src屬性中,而是放到自定義特性里面(data-)
方法一:純粹的延遲加載,使用setTimeOut或setInterval進(jìn)行加載延遲。
方法二:條件加載,符合某些條件,或觸發(fā)了某些事件才開始異步加載;
方法三:可視區(qū)加載,即僅加載用戶可以看到的區(qū)域,這個主要由監(jiān)控滾動條來實現(xiàn),一般會在距用戶看到某圖片前一定距離便開始加載,這樣能保證用戶拉下時正好能看到圖片。
預(yù)加載和懶加載的區(qū)別:
- 一個是提前加載,一個是遲緩甚至不加載。
- 懶加載對服務(wù)器有一定的緩解壓力作用,預(yù)加載則會增加服務(wù)器端壓力。
10.VUE的實現(xiàn)原理
11.push返回的是什么?
12.split返回的是什么?
13.slice返回的是什么?
14.數(shù)組的方法:
- forEach()
- map()
- filter()
- indexOf()
- every()
- some()
- reduce()
- 改變元素組
- push()
- pop()
- shift()
- unshift()
- sort()
- reverse()
- splice()
- 不改變原數(shù)組
- concat()
- slice()
- split()
- substr() 截取字符串方法
15.為什么要new XMLHTTPrequest?
16.前后端交互的幾個方法?
- 利用cookie
- 利用ajax
- jsonp
- 服務(wù)端渲染
- webSocket 和 Socket.io
17.Vue怎么拿到當(dāng)前點擊元素?
18.組件之間傳遞參數(shù)
19.范德薩發(fā)
20.本地存儲
21.為什么要使用XMLHttpRequest對象?
使用該對象可以更加精細(xì)的控制預(yù)加載過程,缺點是無法跨域。
22.h5新特性
23.瀏覽器存儲