什么是回調(diào)地獄,如何解決?
回調(diào)地獄就是為了實(shí)現(xiàn)代碼順序執(zhí)行的一種操作,它會讓這個(gè)代碼的可讀性非常差,不好維護(hù)。
那么我們可以Promise來解決這個(gè)問題,Promise是一種異步編程的解決方案。
1.Promise構(gòu)造函數(shù)接收一個(gè)函數(shù)作為參數(shù),我們需要處理的異步任務(wù)就卸載該函數(shù)體內(nèi),該函數(shù)的兩個(gè)參數(shù)是resolve,reject。異步任務(wù)執(zhí)行成功時(shí)調(diào)用resolve函數(shù)返回結(jié)果,反之調(diào)用reject。
2.Promise對象的then方法用來接收處理成功時(shí)響應(yīng)的數(shù)據(jù),catch方法用來接收處理失敗時(shí)相應(yīng)的數(shù)據(jù)。
3.Promise的鏈?zhǔn)骄幊炭梢员WC代碼的執(zhí)行順序,前提是每一次在than做完處理后,一定要return一個(gè)Promise對象,這樣才能在下一次then時(shí)接收到數(shù)據(jù)。
圖片1.png
async/await
還有另外一種異步編程的解決方案就是async await,用法就是如果一個(gè)函數(shù)前面寫了async,就表明這個(gè)函數(shù)是一個(gè)異步,不會阻塞后面函數(shù)的執(zhí)行。然后如果你去打印這個(gè)函數(shù)的返回值時(shí),其實(shí)是一個(gè)Promise對象。所以我們可以在這個(gè)函數(shù)后面使用.then,.catch的方法。然后await關(guān)鍵字只能在async定義的函數(shù)中使用,await后面一般是跟一個(gè)Promise實(shí)例對象,并且可以拿到這個(gè)實(shí)例中resolve的數(shù)據(jù)。然后必須等await后面這一步成功之后才會繼續(xù)走下面的代碼,這樣就保證了代碼的執(zhí)行順序。
移動端適配
1.視口適配:通過meta標(biāo)簽設(shè)置name屬性為viewport
2.媒體查詢適配:當(dāng)屏幕寬度滿足什么條件時(shí)使用什么樣式
3.使用js來適配:獲取屏幕的寬度然后修改樣式
4.Rem適配
This指向
this指向:指向調(diào)用者,默認(rèn)是指向window,但是箭頭函數(shù)的this是外層上下文的this
微任務(wù)和宏任務(wù)
Js是單線程的,如果遇到異步的任務(wù)會交給瀏覽器處理
主線程要執(zhí)行的代碼=宏任務(wù)
定時(shí)器/延時(shí)器=宏任務(wù)
只有上一個(gè)宏任務(wù)執(zhí)行完才會執(zhí)行下一個(gè)宏任務(wù)
微任務(wù)就是promise .then .catch需要執(zhí)行的內(nèi)容
在事件循環(huán)隊(duì)列中,微任務(wù)會插隊(duì)
談一談keep-alive這個(gè)組件的實(shí)現(xiàn)原理
我們?nèi)绾卧趘ue項(xiàng)目中應(yīng)用我們的權(quán)限
談一談在vue項(xiàng)目中如何去做我們的導(dǎo)航守衛(wèi)
描述一下document.load和document.ready之間的一個(gè)區(qū)別
Js如何檢測一個(gè)字符串的類型
如何檢測一個(gè)變量是string類型
==和===的區(qū)別
什么是事件委托 事件冒泡
Js new操作符到底做了什么事情
Js如何實(shí)現(xiàn)繼承以及他的優(yōu)缺點(diǎn)
什么叫原型 原型鏈
描述一下什么叫作用域 作用域鏈
描述一下我們的瀏覽器緩存,服務(wù)器緩存和cdn緩存
描述一下你對閉包的理解以及優(yōu)缺點(diǎn),以及閉包所引起的內(nèi)存泄露的解決方案
那數(shù)據(jù)中如何實(shí)現(xiàn)代理,有哪些方式能夠?qū)崿F(xiàn)跨域通信
描述一下jsonp是如何實(shí)現(xiàn)跨域請求以及優(yōu)缺點(diǎn)
什么叫值類型?什么叫引用類型?
描述一下我們前端的堆和棧
