精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

53 道 JavaScript 前端基礎(chǔ)面試題

開發(fā) 前端
由于目前現(xiàn)在求職市場(chǎng)競(jìng)爭(zhēng)激烈,許多初學(xué)者和經(jīng)驗(yàn)豐富的開發(fā)人員都面臨著求職問題。因此,最好的方法是不斷學(xué)習(xí)并提高自己的技能。

寫在前面

由于目前現(xiàn)在求職市場(chǎng)競(jìng)爭(zhēng)激烈,許多初學(xué)者和經(jīng)驗(yàn)豐富的開發(fā)人員都面臨著求職問題。因此,最好的方法是不斷學(xué)習(xí)并提高自己的技能。

為了拿到心儀的offer,我們需要認(rèn)真準(zhǔn)備面試,因此,今天我為大家準(zhǔn)備了53道面試題,我以“一問一答”的形式將這些前端面試題分享出來(lái),希望能夠幫助到你。

雖然這些面試題主要針對(duì)初級(jí)開發(fā)人員,但其中也有包括一些中級(jí)開發(fā)人員的題。

那么,我們現(xiàn)在開始吧。

1. JavaScript 中有哪些數(shù)據(jù)類型?

  • Number — 數(shù)字
  • String — 字符串
  • Boolean — 布爾類型,true 或 false
  • Object — JavaScript 對(duì)象
  • null — 表示“無(wú)”、“空”或“未知值”的特殊值。
  • undefined ——“值尚未被分配”。如果聲明了變量但沒有分配值,則分配此類型。
  • Symbol— 一種唯一且不可變的數(shù)據(jù)類型,可用作對(duì)象屬性的標(biāo)識(shí)符。
  • BigInt — 用于創(chuàng)建大數(shù)。

const bigInt = 1234567890123456789012345678901234567890n;

2.“==”和“===”有什么區(qū)別?

運(yùn)算符“==”檢查抽象相等,而“===”檢查嚴(yán)格相等。換句話說(shuō),“==”運(yùn)算符在比較之前執(zhí)行必要的類型轉(zhuǎn)換,而“===”則不執(zhí)行類型轉(zhuǎn)換。因此,如果兩個(gè)值不是同一類型,則使用“===”運(yùn)算符時(shí)將返回 false。

3. 變量的聲明方式有哪些?

聲明變量有 4 種方法:聲明變量有 4 種方法:

foo =123;
var foo = 123;
let a = 123;
conest a = 123;

使用“var”關(guān)鍵字聲明變量與第一種方法類似。 以這種方式聲明的變量具有全局或函數(shù)作用域,但缺少塊作用域,這是一個(gè)缺點(diǎn)。

“l(fā)et”和“const”是聲明變量的更好方法。 它們具有塊作用域,這意味著在函數(shù)內(nèi)部聲明的變量在該函數(shù)外部將不可見。 

“const”變量是不可變的,但如果它是一個(gè)對(duì)象,你可以改變它的屬性,如果它是一個(gè)數(shù)組,你可以修改和添加元素。

4. null 和 undefined 有什么區(qū)別?

兩個(gè)選項(xiàng)都代表空值。 如果我們初始化一個(gè)變量但不給它賦值,它就會(huì)被分配一個(gè)特殊的標(biāo)記—undefined。Null 是手動(dòng)分配的。Null 是一個(gè)特殊值,表示“無(wú)”、“空”或“未知值”。 如果我們需要清除變量的值,我們?cè)O(shè)置 foo = null。

5. 箭頭函數(shù)以及與常規(guī)函數(shù)的區(qū)別。

  • 箭頭函數(shù)不能使用參數(shù)對(duì)象。
  • 它們有不同的語(yǔ)法。
  • 箭頭函數(shù)沒有自己的 this 上下文。 當(dāng)引用 this 時(shí),箭頭函數(shù)從周圍的作用域中獲取上下文。
  • 箭頭函數(shù)不能用作構(gòu)造函數(shù)。 換句話說(shuō),它們不能用 new 關(guān)鍵字調(diào)用。

6. 什么是閉包?以及為什么需要它們?

閉包是一個(gè)函數(shù)以及它可以訪問的所有外部變量。 例如,有一個(gè)具有嵌套函數(shù)的函數(shù),該函數(shù)將關(guān)閉并保留其父級(jí)的變量。

7. 什么是模板文字?

模板文字用反引號(hào) (") 括起來(lái),并允許多行字符串。 它們還允許在其中嵌入表達(dá)式。

8. 什么是Set和Map?

Map是一個(gè)集合,是一種按照鍵值對(duì)原理進(jìn)行操作的數(shù)據(jù)結(jié)構(gòu),類似于Object。 然而,Map 和 Object 之間的主要區(qū)別在于 Map 允許使用任何類型的鍵。Set 是一種沒有鍵的集合類型,是一個(gè)數(shù)組,其中每個(gè)值只能出現(xiàn)一次。 集合在其內(nèi)部存儲(chǔ)唯一的值。

9. 如何檢查對(duì)象中是否存在屬性?

第一種方法是使用 hasOwnProperty 函數(shù),該函數(shù)適用于每個(gè)對(duì)象。第二種方法是使用 in 運(yùn)算符。 但是,在使用 in 運(yùn)算符時(shí)必須小心,因?yàn)樗鼤?huì)檢查鏈中的所有原型。

10. 如何訪問對(duì)象屬性?

第一種方式是靜態(tài)的,使用點(diǎn)表示法:obj.a。

第二種方式是動(dòng)態(tài)的,使用方括號(hào):obj[‘a(chǎn)’]。

11. 使用數(shù)組的主要方法有哪些?

  • forEach — 用于循環(huán)數(shù)組的迭代方法,不返回任何內(nèi)容。 它提供了比常規(guī) for 循環(huán)更優(yōu)雅的替代方案。
  • filter(callback, [args]) — 一種使用提供的函數(shù)過(guò)濾數(shù)組的方法。 它創(chuàng)建一個(gè)新數(shù)組,其中僅包含回調(diào)(item, i, arr) 函數(shù)返回 true 的原始數(shù)組中的元素。
  • map(callback, [args]) — 一種轉(zhuǎn)換數(shù)組的方法。 它創(chuàng)建一個(gè)新數(shù)組,其中包含為數(shù)組的每個(gè)元素調(diào)用回調(diào)(item, i, arr) 函數(shù)的結(jié)果。
  • reduce(callback, [initValue]) — 一種按順序處理數(shù)組的每個(gè)元素,同時(shí)維護(hù)中間結(jié)果的方法。

12.創(chuàng)建對(duì)象的方式有哪些?

使用構(gòu)造函數(shù):

使用對(duì)象文字表示法:

使用一個(gè)類:

使用創(chuàng)建函數(shù):

13.什么是Promise?

Promise 是一個(gè)設(shè)計(jì)用于處理異步代碼的對(duì)象。它維持自己的狀態(tài)。最初,Promise 處于待處理狀態(tài),如果異步代碼執(zhí)行成功,則 Promise 轉(zhuǎn)換為已完成狀態(tài);如果發(fā)生錯(cuò)誤,則轉(zhuǎn)換為拒絕狀態(tài)。Promise 接受兩個(gè)回調(diào)函數(shù):

  • onFulfilled,當(dāng)Promise履行時(shí)觸發(fā)。
  • onRejected,當(dāng)Promise被拒絕時(shí)觸發(fā)。

使用模式如下:

  • 需要異步執(zhí)行某些操作的代碼會(huì)創(chuàng)建一個(gè) Promise 并返回它。
  • 外部代碼收到 Promise 后,將 onFulfilled 和 onRejected 回調(diào)函數(shù)傳遞給它。
  • 該過(guò)程完成后,異步代碼將 Promise 轉(zhuǎn)換為已完成或已拒絕狀態(tài),并自動(dòng)調(diào)用相應(yīng)的回調(diào)函數(shù)。

14.什么是async/await以及如何使用它?

async/await 是一種處理 Promise 的特殊語(yǔ)法。

使用異步語(yǔ)法聲明的函數(shù)始終返回 Promise。

關(guān)鍵字await使JavaScript解釋器等待,直到await右側(cè)的Promise完成后才繼續(xù)執(zhí)行。然后,它將返回結(jié)果,并且代碼將繼續(xù)執(zhí)行。wait 不能在常規(guī)函數(shù)中使用。

15. 如何檢查一個(gè)對(duì)象是否是數(shù)組?

要檢查對(duì)象是否是數(shù)組,可以使用 Array.isArray() 方法。它接受一個(gè)對(duì)象作為輸入,如果該對(duì)象是數(shù)組則返回 true,如果不是數(shù)組則返回 false。

16. 擴(kuò)展運(yùn)算符 (…) 的目的是什么?

擴(kuò)展運(yùn)算符 (…) 用于解包數(shù)組或?qū)ο蟆?/span>

它允許你擴(kuò)展可迭代的元素,例如,數(shù)組和字符串。

它用在調(diào)用的預(yù)期參數(shù)數(shù)量為零或更多的函數(shù)中。

它用在數(shù)組文字或表達(dá)式中。

它用在對(duì)象文字中,其中鍵值對(duì)的數(shù)量應(yīng)為零或更多。

17. 復(fù)制對(duì)象時(shí)如何避免引用依賴?

如果對(duì)象不包含嵌套對(duì)象,例如:

在這種情況下,你可以使用展開運(yùn)算符或 Object.assign() 方法:

如果對(duì)象包含嵌套對(duì)象:

在這種情況下,你需要執(zhí)行深復(fù)制。

解決方法雖然較慢,但是:

該方法適用于沒有原型和函數(shù)的對(duì)象。

或者,你可以使用 lodash 庫(kù)的 deepClone() 函數(shù)。

18. 如何改變函數(shù)的上下文?

使用bind()方法,該方法返回一個(gè)帶有綁定上下文的新函數(shù)。

使用 call() 和 apply() 方法。主要區(qū)別在于 call() 接受參數(shù)序列,而 apply() 接受參數(shù)數(shù)組作為第二個(gè)參數(shù)。

19. 什么是三元運(yùn)算符/條件運(yùn)算符?

三元運(yùn)算符是 if-else 語(yǔ)句的簡(jiǎn)寫符號(hào)。運(yùn)算符由問號(hào)和冒號(hào)表示。它被稱為三元,因?yàn)樗俏ㄒ唤邮苋齻€(gè)參數(shù)的運(yùn)算符。

健康)狀況 ?表達(dá)式_1:表達(dá)式_2

20.什么是解構(gòu)?

解構(gòu)是一種允許我們將數(shù)組和對(duì)象解包為多個(gè)變量的語(yǔ)法。

21.什么是DOM?

DOM 代表文檔對(duì)象模型。它是將 HTML 文檔表示為標(biāo)簽樹。

例子

DOM 樹中的每個(gè)節(jié)點(diǎn)都是一個(gè)對(duì)象。

HTML 文檔的基本元素是標(biāo)簽。

根據(jù)文檔對(duì)象模型 (DOM),每個(gè) HTML 標(biāo)簽都是一個(gè)對(duì)象。嵌套標(biāo)簽是其父元素的“子元素”。標(biāo)簽內(nèi)的文本也是一個(gè)對(duì)象。所有這些對(duì)象都可以使用 JavaScript 訪問,我們可以使用它們來(lái)操作頁(yè)面。

22.什么是事件循環(huán)?

事件循環(huán)——一種管理代碼執(zhí)行的機(jī)制。它以正確的順序處理事件處理和任務(wù)執(zhí)行。

事件循環(huán)的主要思想是JavaScript在單線程環(huán)境中運(yùn)行但可以處理異步操作。當(dāng)異步操作(例如服務(wù)器請(qǐng)求)完成時(shí),它將相應(yīng)的事件放入事件隊(duì)列中。

事件循環(huán)以循環(huán)方式工作,按照事件到達(dá)的順序處理這些事件。

它從隊(duì)列中獲取一個(gè)事件并將其傳遞以供執(zhí)行。如果事件包含回調(diào)或處理程序,則會(huì)調(diào)用它,并執(zhí)行與該事件關(guān)聯(lián)的代碼。

事件循環(huán)還處理其他任務(wù),例如計(jì)時(shí)器和微任務(wù)(Promise)。它管理所有這些任務(wù)的執(zhí)行順序,以確保一致性并防止阻塞代碼執(zhí)行的主線程。

簡(jiǎn)而言之,JavaScript 中的事件循環(huán)通過(guò)處理隊(duì)列中的事件并按正確的順序執(zhí)行相應(yīng)的代碼來(lái)管理異步操作。這使得 JavaScript 在處理異步操作時(shí)能夠響應(yīng)并有效地利用其資源。

23.什么是原型繼承?

JavaScript 中的每個(gè)對(duì)象都有一個(gè)屬性——原型??梢詫⒎椒ê蛯傩蕴砑拥皆椭???梢愿鶕?jù)原型創(chuàng)建其他對(duì)象。創(chuàng)建的對(duì)象自動(dòng)繼承其原型的方法和屬性。如果對(duì)象中不存在某個(gè)屬性,則將在原型中執(zhí)行其搜索。

24.什么是可選鏈運(yùn)算符?

可選鏈接運(yùn)算符 ?。如果 ? 后面的部分停止計(jì)算并返回undefined。undefined或?yàn)閚ull。

讓我們考慮一個(gè)用戶對(duì)象。大多數(shù)用戶都有一個(gè)地址 user.address 和一個(gè)街道 user.address.street,但有些用戶沒有提供地址。在這種情況下,可選鏈接運(yùn)算符可以幫助我們?cè)趪L試訪問未在地址中指定街道的用戶街道時(shí)避免錯(cuò)誤。

25.什么是 Shadow DOM?

Shadow DOM 是一組 Web 標(biāo)準(zhǔn),允許封裝網(wǎng)頁(yè)上元素的結(jié)構(gòu)和樣式。它代表 DOM 的一個(gè)特殊片段,位于元素內(nèi)部并與頁(yè)面的其余部分分開。Shadow DOM 用于創(chuàng)建具有獨(dú)立且風(fēng)格化內(nèi)容的組件和小部件,這些內(nèi)容與頁(yè)面的整體結(jié)構(gòu)不沖突。

26.什么是遞歸?如何使用它?

遞歸是一種解決問題的方法,其中函數(shù)通過(guò)在自己的函數(shù)體內(nèi)重用自身來(lái)解決問題。簡(jiǎn)單來(lái)說(shuō),就是函數(shù)調(diào)用自身的時(shí)候。

遞歸函數(shù)包括:

  • 終止條件或基本情況
  • 遞歸步驟——一種將問題簡(jiǎn)化為更簡(jiǎn)單形式的方法。

基本情況是必要條件;否則,會(huì)因函數(shù)調(diào)用無(wú)限循環(huán)而導(dǎo)致堆棧溢出。

27. 函數(shù)表達(dá)式和函數(shù)聲明有什么區(qū)別?

函數(shù)聲明是聲明函數(shù)的傳統(tǒng)方式。

函數(shù)表達(dá)式:

通過(guò)函數(shù)聲明,可以創(chuàng)建函數(shù)并將其分配給變量,就像任何其他值一樣。本質(zhì)上,函數(shù)如何定義并不重要,因?yàn)樗谴鎯?chǔ)在變量“foo”中的值。

然而,函數(shù)聲明是在執(zhí)行代碼塊之前處理的,這意味著它們?cè)谡麄€(gè)代碼塊中都是可見的。另一方面,函數(shù)表達(dá)式僅在執(zhí)行流到達(dá)時(shí)才會(huì)創(chuàng)建。

28.什么是構(gòu)造函數(shù)?

構(gòu)造函數(shù)是用于創(chuàng)建對(duì)象的常規(guī)函數(shù)。但是,使用它們有兩個(gè)規(guī)則:

  • 構(gòu)造函數(shù)的名稱應(yīng)以大寫字母開頭。
  • 應(yīng)使用 new 運(yùn)算符調(diào)用構(gòu)造函數(shù)。

當(dāng)使用 new 運(yùn)算符創(chuàng)建構(gòu)造函數(shù)時(shí),會(huì)發(fā)生以下情況:

  • 創(chuàng)建一個(gè)新的空對(duì)象并將其分配給該對(duì)象。
  • 執(zhí)行構(gòu)造函數(shù)內(nèi)的代碼。通常,此代碼將修改 this 對(duì)象并添加新屬性。
  • 返回此值。

29. 如何從對(duì)象中獲取鍵列表和值列表?

你可以使用 Object.keys() 獲取鍵列表,使用 Object.values() 獲取值列表。

30. 提供 ES6 中新功能的示例。

最常見的:

  • let和const。引入新關(guān)鍵字 let 和 const 用于聲明具有塊作用域的變量。
  • 箭頭函數(shù)。箭頭函數(shù)的概念允許更簡(jiǎn)潔和清晰的函數(shù)定義。

  • 默認(rèn)參數(shù)。你可以定義函數(shù)參數(shù)的默認(rèn)值。

  • 展開運(yùn)算符 (...)。擴(kuò)展運(yùn)算符允許解包函數(shù)參數(shù)的數(shù)組或?qū)ο笤鼗騽?chuàng)建新的數(shù)組/對(duì)象。

  • 解構(gòu)。解構(gòu)允許從數(shù)組或?qū)ο笾刑崛≈挡⑺鼈兎峙浣o變量。

31. ES6中如何進(jìn)行類繼承?

類繼承是使用“extends”關(guān)鍵字后跟父類的名稱來(lái)完成的。

32. JavaScript 中的微任務(wù)和宏任務(wù)是什么?

在 JavaScript 中,微任務(wù)和宏任務(wù)是指需要在事件循環(huán)中執(zhí)行的任務(wù)類型。

微任務(wù)是在瀏覽器重新繪制頁(yè)面之前需要在當(dāng)前事件循環(huán)內(nèi)執(zhí)行的任務(wù)。它們通常使用 Promise.then()、process.nextTick()(在 Node.js 中)或 MutationObserver 等方法添加到執(zhí)行隊(duì)列中。

微任務(wù)的示例包括執(zhí)行 Promise 處理程序和 DOM 突變。 

另一方面,宏任務(wù)是在當(dāng)前事件循環(huán)完成之后、在屏幕上呈現(xiàn)更改之前需要執(zhí)行的任務(wù)。 

這包括使用 setTimeout、setInterval、requestAnimationFrame 添加到事件隊(duì)列的任務(wù),以及處理輸入事件和網(wǎng)絡(luò)請(qǐng)求。

宏任務(wù)在當(dāng)前事件循環(huán)中的所有微任務(wù)處理完畢后執(zhí)行。 

微任務(wù)和宏任務(wù)之間的區(qū)別很重要,因?yàn)樗鼪Q定了執(zhí)行順序并允許管理 JavaScript 中不同任務(wù)的優(yōu)先級(jí)。 

微任務(wù)具有更高的優(yōu)先級(jí),并且在宏任務(wù)之前執(zhí)行,這樣可以更快地更新界面并防止阻塞主 JavaScript 執(zhí)行線程。

33.什么是生成器?

生成器根據(jù)需要一個(gè)一個(gè)地生成一系列值。生成器可以很好地與對(duì)象配合使用,并且可以輕松創(chuàng)建數(shù)據(jù)流。

要聲明生成器,需要使用一種特殊的語(yǔ)法——生成器函數(shù)。

next() 是生成器的主要方法。調(diào)用時(shí),next() 開始執(zhí)行代碼,直到最近的yield 語(yǔ)句。該值可能不存在,在這種情況下它表示為未定義。當(dāng)達(dá)到y(tǒng)ield時(shí),函數(shù)執(zhí)行暫停,并將相應(yīng)的值返回給外部代碼。

34.瀏覽器中存儲(chǔ)數(shù)據(jù)的方法有哪些?

在瀏覽器中存儲(chǔ)數(shù)據(jù)有多種方法:

  • LocalStorage 和 SessionStorage — 在瀏覽器中存儲(chǔ)鍵值對(duì)。其中存儲(chǔ)的數(shù)據(jù)在頁(yè)面刷新后仍保留。兩種存儲(chǔ)選項(xiàng)都只能使用字符串作為鍵和值,因此需要使用 JSON.stringify() 轉(zhuǎn)換對(duì)象。Cookie — 存儲(chǔ)在瀏覽器中的小數(shù)據(jù)字符串。
  • Cookie 通常由 Web 服務(wù)器使用 Set-Cookie 標(biāo)頭設(shè)置。然后,瀏覽器將使用 Cookie 標(biāo)頭自動(dòng)將它們添加到幾乎每個(gè)對(duì)同一域的請(qǐng)求中。一個(gè) cookie 最多可以容納 4kb 的數(shù)據(jù)。根據(jù)瀏覽器的不同,每個(gè)站點(diǎn)允許使用 20 個(gè)以上的 cookie。
  • IndexedDB — 內(nèi)置數(shù)據(jù)庫(kù),比 localStorage 更強(qiáng)大。它是一個(gè)鍵值存儲(chǔ),其中有多種類型的鍵可用,值幾乎可以是任何東西。IndexedDB 支持事務(wù)以提高可靠性,支持鍵范圍查詢和索引,并允許存儲(chǔ)比 localStorage 更多的數(shù)據(jù)。IndexedDB 是為離線應(yīng)用程序設(shè)計(jì)的,可以與 Service Workers 等技術(shù)結(jié)合。

35、sessionStorage和localStorage有什么區(qū)別?

SessionStorage 和 localStorage 允許在瀏覽器中以鍵值格式存儲(chǔ)對(duì)象。

主要區(qū)別是:

  • localStorage 最多可以存儲(chǔ) 10 MB 的數(shù)據(jù),而 sessionStorage 最多可以存儲(chǔ) 5 MB 的數(shù)據(jù)。
  • localStorage 中的數(shù)據(jù)不會(huì)被刪除,而 sessionStorage 中的數(shù)據(jù)會(huì)在瀏覽器選項(xiàng)卡關(guān)閉時(shí)被刪除。
  • localStorage 中的數(shù)據(jù)可以從任何窗口訪問,而 sessionStorage 中的數(shù)據(jù)只能從同一瀏覽器窗口訪問。

36.什么是正則表達(dá)式?

正則表達(dá)式是由特殊規(guī)則和模式定義的字符串。它們是一個(gè)強(qiáng)大的工具,可以檢測(cè)和處理字符串中的復(fù)雜結(jié)構(gòu)。

37.WeakSet和WeakMap是什么,它們與Map和Set有何不同?

WeakMap 和 Map 之間的第一個(gè)區(qū)別是 WeakMap 中的鍵必須是對(duì)象,而不是原始值。

第二個(gè)區(qū)別在于數(shù)據(jù)結(jié)構(gòu)的內(nèi)存存儲(chǔ)。JavaScript 引擎將值保存在內(nèi)存中,只要它們是可訪問的,這意味著它們可以被使用。

通常,對(duì)象屬性、數(shù)組元素或其他數(shù)據(jù)結(jié)構(gòu)被認(rèn)為是可訪問的,并且只要數(shù)據(jù)結(jié)構(gòu)存在,它們就會(huì)保留在內(nèi)存中,即使沒有其他對(duì)它們的引用。

對(duì)于 WeakMap 和 WeakSet 來(lái)說(shuō),它的工作方式不同。一旦對(duì)象變得不可訪問,它將從數(shù)據(jù)結(jié)構(gòu)中刪除。

38. 為什么兩個(gè)具有相同字段的對(duì)象比較時(shí)返回 false?

根據(jù)對(duì)內(nèi)存區(qū)域的引用來(lái)比較對(duì)象。對(duì)于 JavaScript,test1 和 test2 對(duì)象是不同的,即使它們具有相同的字段。僅當(dāng)對(duì)象是同一個(gè)對(duì)象時(shí),它們才相等。

39. 為什么我們可以調(diào)用原始類型的方法?

JavaScript 允許使用原始數(shù)據(jù)類型(字符串、數(shù)字等),就像它們是對(duì)象一樣。原始數(shù)據(jù)類型有方法。

為了使此功能可用,每個(gè)基本數(shù)據(jù)類型都有自己的包裝對(duì)象:字符串、數(shù)字、布爾值和符號(hào)。由于這些包裝對(duì)象,原始數(shù)據(jù)類型具有不同的方法集,例如 toLowerCase() 或 toUpperCase()。

40. 如何檢查對(duì)象是從哪個(gè)類創(chuàng)建的?

你可以使用instanceof運(yùn)算符檢查對(duì)象是從哪個(gè)類創(chuàng)建的,同時(shí)考慮繼承。

41. 編寫代碼,每 10 秒記錄一次在網(wǎng)站上花費(fèi)的時(shí)間(以秒為單位)。

42.什么是純函數(shù)?

純函數(shù)需要滿足以下兩個(gè)條件的函數(shù):

  • 每次使用相同的參數(shù)集調(diào)用該函數(shù)時(shí),它都會(huì)返回相同的結(jié)果。
  • 它沒有副作用,這意味著它不會(huì)修改函數(shù)外部的變量。

43.什么是高階函數(shù)?

高階函數(shù)是接受另一個(gè)函數(shù)作為參數(shù)或返回一個(gè)函數(shù)作為結(jié)果的函數(shù)。

44. 如果我們可以使用回調(diào)來(lái)處理異步代碼,為什么還需要 Promise?

如果我們想使用回調(diào)函數(shù)從服務(wù)器異步獲取一些數(shù)據(jù),則會(huì)導(dǎo)致以下結(jié)果:

這稱為回調(diào)地獄,因?yàn)槊總€(gè)回調(diào)都嵌套在另一個(gè)回調(diào)中,并且每個(gè)內(nèi)部回調(diào)都依賴于父函數(shù)。

使用Promises,我們可以重寫上面的代碼:

有了Promises,執(zhí)行順序就清晰了,讓代碼更具可讀性。

45. 編寫你自己的bind 方法的實(shí)現(xiàn)。

為了實(shí)現(xiàn)它,我們可以使用閉包和 apply() 方法將函數(shù)綁定到上下文。

46. 用加、減、乘、除和 get 方法編寫一個(gè)計(jì)算器函數(shù)。該函數(shù)必須通過(guò)可選鏈來(lái)工作。

47. 編寫一個(gè) randomSort 函數(shù),該函數(shù)接受一個(gè)數(shù)字?jǐn)?shù)組并按隨機(jī)順序?qū)?shù)組進(jìn)行排序。

你可以使用 sort() 方法和 Math.random() 來(lái)實(shí)現(xiàn)此目的。

48. 編寫一個(gè)deleteGreatestValue 函數(shù),該函數(shù)接受一個(gè)二維數(shù)字?jǐn)?shù)組,并從每個(gè)嵌套數(shù)組中刪除最大的數(shù)字。

我們應(yīng)該迭代每個(gè)嵌套數(shù)組,獲取每個(gè)嵌套數(shù)組的最大值并將其刪除。

49. 編寫一個(gè) sortPeople 函數(shù),它接受一個(gè)字符串名稱數(shù)組和一個(gè)數(shù)字高度數(shù)組,其中名稱[i] == heights[i]。它應(yīng)該根據(jù)高度數(shù)組對(duì)名稱數(shù)組進(jìn)行排序。

50. 編寫一個(gè)subsets 函數(shù),它接受一個(gè)數(shù)字?jǐn)?shù)組nums 并返回這些數(shù)字的所有可能的數(shù)組變體。

51.如何反轉(zhuǎn)鏈表?

讓我們創(chuàng)建一個(gè)函數(shù)reverseLinkedList,它將鏈表作為輸入并返回該列表的反轉(zhuǎn)版本。

方法:

  • 它用 null 初始化結(jié)果變量,該變量將保存反轉(zhuǎn)的列表。
  • 它使用 head 初始化 root 變量,該變量指向列表的開頭。
  • 它進(jìn)入一個(gè) while 循環(huán),一直持續(xù)到 root 變?yōu)?null,表示列表末尾。
  • 在循環(huán)內(nèi)部,它檢查結(jié)果是否已經(jīng)有元素。如果是,它會(huì)使用當(dāng)前值 root.val 和指向下一個(gè)節(jié)點(diǎn)結(jié)果的指針創(chuàng)建一個(gè)新的列表節(jié)點(diǎn)。然后它用這個(gè)新節(jié)點(diǎn)更新結(jié)果。
  • 如果 result 還沒有任何元素,它將創(chuàng)建一個(gè)新的列表節(jié)點(diǎn),其中當(dāng)前值 root.val 和 null 作為指向下一個(gè)節(jié)點(diǎn)的指針。然后它用這個(gè)新節(jié)點(diǎn)更新結(jié)果。
  • 更新結(jié)果后,通過(guò)將 root.next 分配給 root 來(lái)移動(dòng)到列表中的下一個(gè)元素。
  • while 循環(huán)完成后,它返回結(jié)果中存儲(chǔ)的反轉(zhuǎn)列表。

總之,該函數(shù)通過(guò)從頭到尾迭代每個(gè)節(jié)點(diǎn),為每個(gè)值創(chuàng)建一個(gè)新的列表節(jié)點(diǎn)并相應(yīng)地更新指針來(lái)反轉(zhuǎn)鏈表。

52.如何對(duì)鏈表進(jìn)行排序?

讓我們創(chuàng)建一個(gè)函數(shù) sortList,它將鏈表作為輸入并返回該列表的排序版本。

方法:

  • 檢查給定的鏈表是否為空。
  • 遍歷鏈表并將節(jié)點(diǎn)值存儲(chǔ)到數(shù)組中。
  • 使用內(nèi)置的 sort() 方法對(duì)數(shù)組進(jìn)行排序。
  • 使用排序后的數(shù)組創(chuàng)建一個(gè)新的鏈表。
  • 返回創(chuàng)建的鏈表的頭。

53. Observables 和 Promise 之間有什么區(qū)別?

Observables 和 Promises 都用于處理 JavaScript 中的異步操作。

一個(gè)關(guān)鍵的區(qū)別是 Observables 可以隨著時(shí)間的推移發(fā)出多個(gè)值。

它們適合處理數(shù)據(jù)流,例如用戶交互、事件或來(lái)自 API 的隨時(shí)間變化的數(shù)據(jù)。另一方面,承諾只能用單個(gè)值解析一次。

它們適合處理要么成功要么失敗的單個(gè)異步操作。

總之,Promises 最適合處理具有單個(gè)結(jié)果的一次性異步操作,而 Observables 在處理持續(xù)的數(shù)據(jù)流、事件和復(fù)雜的數(shù)據(jù)處理管道時(shí)更強(qiáng)大。

它們之間的選擇取決于特定的用例以及你正在處理的異步操作的性質(zhì)。

寫在最后

在準(zhǔn)備這些面試題以及研究所涵蓋的主題并查看相關(guān)資源的時(shí)候,相當(dāng)于又把一些知識(shí)做了復(fù)習(xí),對(duì)于之前沒有記住的內(nèi)容,通過(guò)對(duì)這些內(nèi)容的掌握,可以提升你的面試成功通過(guò)機(jī)率。


責(zé)任編輯:華軒 來(lái)源: web前端開發(fā)
相關(guān)推薦

2024-01-01 15:30:59

JavaScriptWeb 應(yīng)用程序開發(fā)

2024-06-04 14:52:28

2018-02-25 16:35:32

前端CSS面試題

2025-08-19 09:28:53

2021-02-02 06:12:39

JavaScript 前端面試題

2010-11-26 10:53:29

戴爾

2023-08-27 15:57:28

前端開發(fā)

2025-01-09 12:00:00

JavaScript前端數(shù)組

2024-04-15 08:34:43

2024-04-28 08:23:18

2013-01-05 14:51:34

JavaScriptjQuery面試

2015-07-23 14:13:43

前端開發(fā)面試題

2020-11-13 16:00:57

SpringCloud面試架構(gòu)

2022-02-11 14:01:22

底層String字符串

2024-10-11 17:09:27

2021-10-26 11:45:22

Vue面試前端

2019-05-15 16:45:13

SpringBoot面試題Java

2022-01-18 08:16:52

Web 前端JavaScript

2017-03-10 09:33:16

JavaScript類型

2020-09-16 11:50:18

MySQL數(shù)據(jù)庫(kù)面試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

激情网站五月天| 91精品国产九九九久久久亚洲| 国产精品天天av精麻传媒| 在线视频自拍| 国产成人精品在线看| 国模极品一区二区三区| 国产免费一区二区三区网站免费| 欧美日韩伦理一区二区| 亚洲激情图片小说视频| 精品一区二区视频| 中文字幕一区二区久久人妻| 亚洲精品电影| 亚洲免费一在线| 不卡中文字幕在线观看| 超碰在线最新网址| 亚洲欧洲在线观看av| 精品一区二区不卡| 国产女人18毛片水18精| 羞羞答答国产精品www一本| 久久亚洲私人国产精品va| 国产福利在线观看视频| 国产一区2区在线观看| 色哟哟在线观看一区二区三区| 亚洲一区二区三区涩| 无码国产精品一区二区免费16| 欧美bbbbb| 91国在线精品国内播放| 久久国产美女视频| 欧美一级精品| 日韩av最新在线观看| 一级黄色免费毛片| 欧美videos粗暴| 色综合视频一区二区三区高清| 日韩欧美视频免费在线观看| 色老头视频在线观看| 久久奇米777| 国产一级特黄a大片99| 99久久精品无免国产免费 | 成人亚洲一区二区一| 国产欧美日韩精品在线观看| 欧美一级淫片免费视频黄| 亚洲精品社区| 久久乐国产精品| 久久久国产精品人人片| 亚洲午夜精品一区二区国产| 正在播放国产一区| 91麻豆精品国产91久久综合| 丝袜连裤袜欧美激情日韩| 欧美精品一区在线观看| 麻豆短视频在线观看| 日韩三级精品| 日韩精品一区二区三区中文不卡| 香蕉视频xxxx| 亚洲精品v亚洲精品v日韩精品| 4438x成人网最大色成网站| 老司机久久精品| 91精品店在线| 欧美美女网站色| 免费精品99久久国产综合精品应用| 欧美黄色a视频| 欧美疯狂性受xxxxx喷水图片| 依人在线免费视频| 先锋影音网一区二区| 欧美日韩中文字幕一区| 日韩一区二区三区不卡视频| 96sao精品免费视频观看| 7777精品伊人久久久大香线蕉超级流畅| 2025韩国理伦片在线观看| 福利视频一区| 日韩一级视频免费观看在线| 午夜剧场免费看| 天堂日韩电影| 揄拍成人国产精品视频| 99久久精品久久亚洲精品| 亚洲午夜精品一区二区国产| 欧美国产中文字幕| 波多野结衣视频网站| 日韩精品免费专区| 成人中心免费视频| 成人av一区二区三区在线观看| 丁香婷婷深情五月亚洲| 久久精品国产综合精品| 高清性色生活片在线观看| 日韩美女啊v在线免费观看| 国产精品免费在线免费 | 久久久精品人妻一区二区三区| 亚洲精品无播放器在线播放| 日韩一级免费观看| 在线观看av中文字幕| 欧美日韩 国产精品| 精品久久久久一区二区国产| 娇妻高潮浓精白浆xxⅹ| 欧美一级一片| 男女性色大片免费观看一区二区 | 亚洲欧美自拍视频| 麻豆国产精品一区二区三区 | 亚洲一区二区三区精品在线| 日本xxxxxxx免费视频| 日韩色性视频| 日韩电影大片中文字幕| 国产成人av免费在线观看| 中文在线一区| 成人激情免费在线| 深夜福利免费在线观看| 亚洲色图在线视频| 国产又黄又猛视频| 国产精品色呦| 久久久成人精品视频| 久久久久久在线观看| 国产精品一级片| 水蜜桃一区二区| 国产在线观看www| 欧美色综合影院| 最近中文字幕无免费| 亚洲精品电影| 国产精品日日做人人爱| 午夜视频福利在线观看| 亚洲女与黑人做爰| 久久99久久99小草精品免视看| 欧美黑人国产人伦爽爽爽| 波多野结衣视频在线观看| 国产精品18久久久久久久网站| 日本午夜一区二区三区| а√在线中文在线新版| 91精品国产91久久综合桃花| 久久久久久草| 亚洲欧美日韩中文字幕在线观看| 免费av一区| 欧美国产极速在线| 91国在线视频| 中文字幕 久热精品 视频在线| 久久久999免费视频| 视频二区欧美| 久久高清视频免费| 国产又粗又大又黄| 国产三区在线成人av| 国产一区二区三区精彩视频 | 日韩一区二区三区中文字幕| 一区二区三区**美女毛片| 三上悠亚在线一区| 欧洲乱码伦视频免费| 人妖精品videosex性欧美| 日本精品999| 亚洲高清不卡在线| 动漫av在线免费观看| 香蕉久久网站| 91亚洲永久免费精品| wwwav在线| 制服.丝袜.亚洲.另类.中文| 波兰性xxxxx极品hd| 久久9热精品视频| 亚洲图片在线观看| 日韩一区中文| 久久久999精品免费| 99国产在线播放| 亚洲在线一区二区三区| 91精品又粗又猛又爽| 99精品免费| 蜜桃91精品入口| 欧美日韩激情电影| 中文亚洲视频在线| 国产精品探花视频| 亚洲最色的网站| 欧美黄色视屏| 中文字幕日韩一区二区| 五月激情五月婷婷| 亚洲乱码免费伦视频| 99久久精品免费看国产四区| 青春草在线视频| 日韩国产在线看| 国产又粗又猛又黄视频| 国产精品另类一区| 天天久久综合网| 国产一区清纯| 欧美国产综合视频| 本网站久久精品| 欧美成人精品一区二区| 欧美 日韩 国产 成人 在线| 日韩欧美在线播放| 精品国产大片大片大片| 精品一区二区三区的国产在线播放| 亚洲精品中文综合第一页| 久久久久亚洲精品中文字幕| 91精品国产91久久久久久久久| yw视频在线观看| 日韩女优av电影在线观看| 久草手机在线视频| 亚洲视频在线一区二区| 成人免费无码大片a毛片| 91免费小视频| 国产成人三级在线观看| 欧美 日韩 国产 在线观看| 日韩精品成人| 日本久久久久亚洲中字幕| 欧美日韩视频在线播放| 高清在线观看日韩| 午夜精品久久99蜜桃的功能介绍| 99在线热播| 欧美va在线观看| 欧美—级a级欧美特级ar全黄| 久久久久久久久亚洲精品| 337p亚洲精品色噜噜狠狠| 国产视频91在线| 国产精品久久久久久久久免费相片| 女性生殖扒开酷刑vk| 日韩av中文在线观看| 国产天堂视频在线观看| 91麻豆精品国产91久久久平台| 精品日产一区2区三区黄免费| 精品176极品一区| 26uuu另类亚洲欧美日本老年| 国产精品剧情一区二区在线观看| 日韩精品在线视频| www.天堂av.com| 欧美性大战久久久| 少妇一级淫片免费放中国 | 国产极品视频在线观看| caoporn国产精品| 欧美日韩一区二区区| 另类综合日韩欧美亚洲| 黑鬼大战白妞高潮喷白浆| 国内精品亚洲| 在线观看精品视频| 欧美在线电影| 久久久久久九九| 波多野结衣一本| 国产综合激情| 中国 免费 av| 国产精品久久久久无码av| 欧美一区二区三区精美影视| 欧美电影在线观看免费| 国产精品夜夜夜一区二区三区尤| 久久亚洲精精品中文字幕| 国产精品直播网红| 久久不卡日韩美女| 国产精品揄拍500视频| 91在线成人| 国产精品久久久久福利| 激情亚洲影院在线观看| 欧美自拍大量在线观看| 亚洲最大成人| 奇米四色中文综合久久| 亚洲三级欧美| 欧美专区在线播放| 欧美黑人疯狂性受xxxxx野外| 清纯唯美亚洲激情| 三上悠亚一区二区| 国产精品久久久久久久久久东京| 欧亚一区二区| 国产精品久久久久久久7电影| 欧美黑人疯狂性受xxxxx野外| 国产97色在线|日韩| jizz亚洲女人高潮大叫| 国产日韩av在线播放| 亚洲精品成人一区| 亚洲最大福利视频网| 亚洲精品不卡在线观看| 国产v亚洲v天堂无码| 91蜜桃臀久久一区二区| 国产欧美日韩一区二区三区| 亚洲ab电影| 日本一区二区三区免费观看| 欧美偷拍综合| 国产成人精品免费看在线播放 | 一级久久久久久| 欧美三级在线看| 国产精品毛片久久久久久久av| 日韩一二三四区| 熟妇人妻一区二区三区四区| 亚洲欧洲在线看| 免费大片在线观看www| 欧美成人精品xxx| 在线中文字幕播放| 国产精品高潮呻吟久久av黑人| 欧美综合社区国产| 福利精品视频| 国产亚洲一卡2卡3卡4卡新区| 伊人久久大香线蕉成人综合网| 欧美三级网页| 99久久国产宗和精品1上映| 极品少妇xxxx偷拍精品少妇| 三级视频网站在线观看| 国产日韩欧美a| 九九九免费视频| 色香色香欲天天天影视综合网| 国产一区二区三区四区视频| 亚洲护士老师的毛茸茸最新章节| 成人激情电影在线看| 欧美黄色片免费观看| 亚洲第一影院| 97免费高清电视剧观看| 自拍视频一区| 少妇久久久久久被弄到高潮| 三级一区在线视频先锋| 成人免费播放视频| 国产欧美视频在线观看| 国产无遮挡免费视频| 欧美日韩国产区一| 三级黄视频在线观看| 久久成人综合视频| 日韩精品99| 国产精品久久精品视| 日韩欧美在线中字| 成人在线免费观看av| 国产精品一区二区三区乱码| 国产又黄又粗视频| 午夜伊人狠狠久久| 国产日韩欧美一区二区东京热| 亚洲欧洲xxxx| 国产理论电影在线| 成人综合网网址| 欧美日韩在线二区| 青青在线视频观看| 成人午夜短视频| 精品国产乱码久久久久久鸭王1| 在线精品国精品国产尤物884a| 四季av日韩精品一区| 欧美国产亚洲视频| 电影一区二区三区久久免费观看| 日韩精品另类天天更新| 99综合精品| 毛茸茸free性熟hd| 亚洲综合另类小说| 99国产揄拍国产精品| 精品国产依人香蕉在线精品| 成人国产精品| 色之综合天天综合色天天棕色| 在线亚洲免费| 影音先锋人妻啪啪av资源网站| 夜夜嗨av一区二区三区| 国产成人久久精品77777综合 | 看片的网站亚洲| 国产精品美女高潮无套| 色婷婷久久久综合中文字幕| 视频三区在线观看| 琪琪亚洲精品午夜在线| 日本一区福利在线| 久久久亚洲精品无码| 99这里只有久久精品视频| 日本三级中文字幕| 亚洲电影免费观看高清完整版在线观看| 性xxxxfjsxxxxx欧美| 91黄在线观看| 亚洲日本视频| 国产呦小j女精品视频| 欧美午夜电影在线| 欧美黄色小说| 国产精品日韩精品| 久久精品久久久| 天天操精品视频| 亚洲精品自拍动漫在线| 亚洲av无码专区在线| 久久久日本电影| 久久99精品国产麻豆不卡| 偷偷色噜狠狠狠狠的777米奇| 亚洲一区日韩精品中文字幕| www.桃色av嫩草.com| 欧美激情手机在线视频 | 少妇av片在线观看| 欧美在线观看你懂的| 在线观看黄色av| 成人黄色av播放免费| 欧美国产激情| 黄色网址在线视频| 91国偷自产一区二区三区观看| a天堂中文在线88| 国产在线久久久| 欧美日韩亚洲三区| 亚洲av无码成人精品国产| 欧洲精品中文字幕| 菠萝菠萝蜜在线视频免费观看| 成人一区二区三区四区| 一区二区日韩免费看| 九一在线免费观看| 欧美成人vps| 成人性生活视频| 中文字幕一区二区三区四区五区六区| 国产精品99久久久久久久vr| 日本一区二区三区四区五区| 亚洲天堂av综合网| 精品国产亚洲一区二区三区在线| 欧美成人精品三级在线观看| 国产又爽又黄的视频| 日韩国产精品视频| 欧美亚洲人成在线| 国产在线视频综合| 国产午夜精品福利| www.五月婷| 国产成人自拍视频在线观看| 欧美一区91| 在线免费观看麻豆| 日韩欧美一级片| 欧美xnxx| 久久久亚洲国产精品| 中文字幕制服丝袜成人av| 日本激情一区二区三区| 成人国产精品免费视频| 亚洲制服少妇| 69av视频在线| 中文字幕国内精品|