前端常見手寫題

前言
找了一個(gè)多月的暑期實(shí)習(xí)終于有個(gè)美團(tuán)的offer了。
一個(gè)月下來的總結(jié)就是找實(shí)習(xí)前最好有相關(guān)實(shí)習(xí)經(jīng)歷(沒繃?。?/span>
這篇文件主要用于記錄一下面試常見手寫題(雖然面試的時(shí)候根本沒用到)。
當(dāng)然,只是簡(jiǎn)單實(shí)現(xiàn),有些面試官可能還會(huì)叫你拓展一下啥啥的。

深拷貝
遞歸版如下,當(dāng)然也可以用JSON.stringify +?JSON.parse~。
數(shù)組扁平化
邏輯和深拷貝差不多,遞歸就vans了,當(dāng)然還有 Array.flat() 這個(gè)API。
防抖和節(jié)流
之前的面試官有問過輸入框和頁(yè)面滾動(dòng)分別用哪個(gè)函數(shù),我的回答是輸入框:防抖,頁(yè)面滾動(dòng):節(jié)流。我之后沒確認(rèn)過,感興趣的話可以自己查一下。。。
代碼如下:
柯里化
一開始看到函數(shù)柯里化我也很懵逼,后來一想其實(shí)就是用一個(gè)數(shù)組(或其他數(shù)據(jù)結(jié)構(gòu))把每次傳遞的參數(shù)保存起來,等要獲取結(jié)果的時(shí)候再對(duì)數(shù)組里的數(shù)據(jù)進(jìn)行操作。
知道了如何處理數(shù)據(jù),那么如何實(shí)現(xiàn)反復(fù)調(diào)用呢,比如:add(1)(2, 3)(4) ?
其實(shí)只要每次返回同一個(gè)函數(shù)就行了,和promise可以不斷的.then差不多(每個(gè)then都會(huì)返回一個(gè)新的promise對(duì)象)。
下面是用柯里化實(shí)現(xiàn)的相加函數(shù):
Promise API
經(jīng)典手寫問題,不會(huì)手寫Promise A+規(guī)范還說你會(huì)前端?
就像在柯里化部分提到的,為了使Promise的各種方法都能不斷的.then下去,首先就是要返回一個(gè)新的Promise對(duì)象。
Promise.all?
Promise.race
race和all類似,甚至更簡(jiǎn)單,直接返回第一個(gè)接受到的請(qǐng)求就ok。
寄生組合式繼承
js有各種繼承方法,我這兒就記一個(gè)比較完美的方法,當(dāng)然es6也提供了extend語(yǔ)法糖。
結(jié)語(yǔ)
這年頭的暑期實(shí)習(xí)都這么難找,太折磨了。
很喜歡任正非說的一句話:將互聯(lián)網(wǎng)寒氣傳給每個(gè)人!
有一說一今年華子的暑期實(shí)習(xí)開的好晚,要4月末才筆試,感覺池子深不見底啊~