千鋒教育web前端高頻面試題視頻教程,kerwin大話前端面試秘籍(附答案)

ES6新增
1.var,let,const的區(qū)別?
(1).通過var定義的變量,會有一個變量聲明提升,例如先打印a再定義a是可以的,但是let和const不會聲明提前,所以這樣操作會直接報錯。并且被const定義的無法被修改。
2.解構(gòu)賦值
結(jié)構(gòu)分為對象或數(shù)組結(jié)構(gòu),一般用于從后端返回一個很大對象,但可能我們只想要其中的幾個屬性,這時就可以通過結(jié)構(gòu)賦值取出來想要的屬性
3.箭頭函數(shù)
箭頭函數(shù)中沒有自己的this,箭頭函數(shù)的this是指向外部的this,在箭頭函數(shù)創(chuàng)建時就綁定好了我們可以通過一個例子來證實


4.Proxy
Proxy除了代理能力,非常簡單的直接從底層支持對數(shù)組的監(jiān)聽和修改。比Object.defineProperty更加強大,這也是vue2升級到vue3劫持數(shù)據(jù)的底層改變
5.Promise
Promise衍生的問題
處理異步方案:
(1)回調(diào)函數(shù)
(2)promise:當resolve方法調(diào)用了就走then返回函數(shù),如果調(diào)用了reject方法就會走catch回調(diào)
(3)generator生成器配合yield
(4)語法糖 async await (這個語法糖是在ES8中新增的)
promise解決回調(diào)地獄,利用鏈式調(diào)用,請求完第一個接口,是為第二個接口做準備的
async await:用同步寫法解決異步,await等待異步結(jié)束,有失敗時還可以用catch捕獲失敗
promise提供的類方法可以直接使用.all、.race、.any
.all:所有的以resolve都結(jié)束就執(zhí)行.then,有一個reject就會執(zhí)行catch
.race:兩個參數(shù)有一個返回結(jié)果.race就結(jié)束,而快的那一個如果時resolve就執(zhí)行.then,是reject就執(zhí)行.catch
.any:跟.race很像但.any不會因為有一個變成rejected的狀態(tài)就就結(jié)束,必須等到所有參數(shù)promise都變成rejected狀態(tài)才結(jié)束
6.Generator函數(shù) 異步編程的解決方案,是一個狀態(tài)機,封裝了多個內(nèi)部狀態(tài)。
每次執(zhí)行Generator函數(shù) 都會返回一個遍歷器對象,這是一個同步的遍歷器,可以通過,next獲取內(nèi)部每一個的狀態(tài)。
當我們調(diào)用 generator.next()時,Generator函數(shù)會從當前暫停的位置開始執(zhí)行,并返回一個包含 value 和 done 屬性的對象.
value 表示 yield 表達式的返回值,而 done 表示是否已經(jīng)選代完所有的 yield 語句。
7.class構(gòu)造函數(shù)
構(gòu)造函數(shù)中的成員有三個:構(gòu)造器constructor、屬性(實例方法靜態(tài)方法)、方法(實例方法靜態(tài)方法)
extents繼承關鍵字直接可以繼承原型上的方法在構(gòu)造器中寫上super()就繼承了構(gòu)造函數(shù)中的屬性,實現(xiàn)了混合繼承。