目錄:
1,簡(jiǎn)述同步和異步的區(qū)別
2, 數(shù)組去重(手寫(xiě)代碼)
3, 在JavaScript中什么是偽數(shù)組?如何將偽數(shù)組轉(zhuǎn)化為標(biāo)準(zhǔn)數(shù)組
4, SPA路由history模式,打包上線(xiàn)都遇到了哪些問(wèn)題?你是如何解決的?
5, JavaScript中callee和caller的作用
簡(jiǎn)述同步和異步的區(qū)別
眾所周知,javascript是單線(xiàn)程的語(yǔ)言,所謂的單線(xiàn)程,就是從上至下,依次執(zhí)行,當(dāng)然這里的依次執(zhí)行要拋開(kāi)javascript的預(yù)解析機(jī)制。
這樣做的原因是因?yàn)閖avascript最初是為了操作DOM,運(yùn)行在瀏覽器環(huán)境下的,而操作DOM的時(shí)候,不能是異步的,不然的話(huà)兩個(gè)異步任務(wù)同時(shí)修改DOM結(jié)構(gòu)的話(huà),會(huì)導(dǎo)致瀏覽器不知道該執(zhí)行哪一個(gè)。
但是這樣做也有缺點(diǎn),當(dāng)遇到一個(gè)響應(yīng)時(shí)間特別長(zhǎng)的任務(wù)時(shí),容易導(dǎo)致頁(yè)面加載錯(cuò)誤或者瀏覽器未響應(yīng)的情況。
同步就是所有的任務(wù)都處在同一隊(duì)列中,不可以插隊(duì),一個(gè)任務(wù)執(zhí)行完接著開(kāi)始執(zhí)行下一個(gè),相對(duì)于瀏覽器而言,同步的效率過(guò)低,一些耗費(fèi)時(shí)間比較長(zhǎng)的任務(wù)應(yīng)該用異步來(lái)執(zhí)行。
異步就是將一個(gè)任務(wù)放入到異步隊(duì)列中,當(dāng)這個(gè)任務(wù)執(zhí)行完成之后,再?gòu)漠惒疥?duì)列中提取出來(lái),插隊(duì)到同步隊(duì)列中,拿到異步任務(wù)的結(jié)果,可以提升代碼執(zhí)行的效率,不需要因?yàn)橐粋€(gè)耗費(fèi)時(shí)長(zhǎng)的代碼而一直等待。
數(shù)組去重(手寫(xiě)代碼)
1,使用ES6的Set去重
Set是ES6新增的數(shù)據(jù)類(lèi)型,Set 的成員具有唯一性
2,使用splice配合兩重for循環(huán)去重
3,使用for循環(huán)配合indexOf去重
4,使用for循環(huán)配合sort排序去重
5,使用for循環(huán)配合includes去重
6.使用filter配合indexOf去重
三:在JavaScript中什么是偽數(shù)組?如何將偽數(shù)組轉(zhuǎn)化為標(biāo)準(zhǔn)數(shù)組
javascript中的偽數(shù)組(類(lèi)數(shù)組):不具有數(shù)組的push,pop等方法,但是具有l(wèi)ength,以及可以利用for循環(huán)遍歷等特性,例如函數(shù)的 arguments 參數(shù)集合,還有通過(guò)document.getElementsByTagName等方法獲取的NodeList等都是類(lèi)數(shù)組
如何將偽數(shù)組轉(zhuǎn)化為標(biāo)準(zhǔn)數(shù)組?
四:SPA路由history模式,打包上線(xiàn)都遇到了哪些問(wèn)題?你是如何解決?
1,資源路徑404問(wèn)題
2,頁(yè)面刷新404問(wèn)題
五:JavaScript中callee和caller的作用
1:callee是函數(shù)arguments對(duì)象內(nèi)的指針,它指向當(dāng)前的函數(shù),使得在函數(shù)內(nèi)部遞歸調(diào)用當(dāng)前函數(shù)時(shí),不需要調(diào)用函數(shù)名稱(chēng),減少函數(shù)內(nèi)部對(duì)于函數(shù)名的依賴(lài)
2:caller是函數(shù)的一個(gè)屬性,它指向調(diào)用當(dāng)前函數(shù)的函數(shù),如果當(dāng)前函數(shù)在其他函數(shù)內(nèi)被調(diào)用,則返回調(diào)用它的那個(gè)函數(shù),如果是在全局環(huán)境下被調(diào)用,則返回 null
我們可以利用caller的特性跟蹤函數(shù)的調(diào)用鏈
完結(jié)