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

P05:一、js有哪些內(nèi)置基本對(duì)象?
(1)內(nèi)置基本對(duì)象是什么?
內(nèi)置基本對(duì)象是指在JavaScript運(yùn)行環(huán)境中預(yù)先定義好的一組對(duì)象,開發(fā)者可以直接使用它們而無需額外的導(dǎo)入或聲明。這些對(duì)象包含了一系列的屬性和方法,用于解決常見的任務(wù)和問題。
(2)js有哪些內(nèi)置基本對(duì)象(分三類)
- 數(shù)據(jù)封裝類對(duì)象:Obiect(對(duì)象)、Array(數(shù)組)、Boolean(布爾值)、Number(數(shù)字)、String(字符串)。
- ES6新增對(duì)象:Symbol(標(biāo)識(shí)唯一性的ID)、Map(映射)、Set(集合)、Promises(處理一步操作)、Proxy(代理)、Reflect(反射)。
- 其他對(duì)象:Function(函數(shù))、RegExp(正則表達(dá)式)、Math(數(shù)學(xué))、Data(日期)、Error(處理錯(cuò)誤對(duì)象)。
二、如何最小化重繪和回流
(1)重繪回流是什么?
簡單來說在JavaScript中,重繪(Repaint)和回流(Reflow)是瀏覽器執(zhí)行頁面布局和繪制的關(guān)鍵概念。它們是瀏覽器渲染引擎執(zhí)行頁面更新的步驟,對(duì)于性能和頁面渲染速度的優(yōu)化是非常重要的。
- 重繪(Repaint):重繪指的是當(dāng)元素的外觀樣式(如顏色、背景、邊框等)發(fā)生改變,但并沒有影響其布局的時(shí)候,瀏覽器會(huì)重新繪制(重繪)該元素。重繪過程并不會(huì)改變?cè)氐膸缀涡畔ⅲù笮?、位置等),只是重新渲染元素的外觀。
- 回流(Reflow):回流指的是當(dāng)頁面布局或幾何信息發(fā)生改變,導(dǎo)致瀏覽器重新計(jì)算元素的布局和幾何屬性的過程?;亓鲿?huì)涉及到整個(gè)頁面或部分頁面的重新測量、計(jì)算和重新布局。
回流的操作是比較耗費(fèi)性能的,因?yàn)樗枰獮g覽器重新計(jì)算元素的位置、大小和幾何屬性,有時(shí)候還會(huì)觸發(fā)其他元素的重新布局。而重繪則相對(duì)較快,因?yàn)樗皇侵匦吕L制元素的外觀而不需要重新計(jì)算布局信息,因此通過合理的使用和避免不必要的回流和重繪,可以提高頁面的性能和渲染速度,優(yōu)化用戶的體驗(yàn)。
(2)如何最小化重繪與回流?
- 需要要對(duì)元素進(jìn)行復(fù)雜的操作時(shí),可以先隱藏display:none),操作完成后再顯示。
- 需要?jiǎng)?chuàng)建多個(gè)DOM節(jié)點(diǎn)時(shí),使用DocumentFragmentt創(chuàng)建完后一次性的加入document。
- 緩存Layout屬性值,如:var left=elem.offsetLeft:這樣,多次使用Iet只產(chǎn)生一次回流。
- 盡量避免用table布局(table元素一旦觸發(fā)回流就會(huì)導(dǎo)致table里所有的其它元素回流)。
三、Javascriptf作用鏈域?
(1)作用域是什么?
作用域指的是在JavaScript中,變量在代碼中可訪問的范圍。它決定了在何處以及如何查找和訪問變量。
JavaScript中有三種主要類型的作用域:
- 全局作用域(Global Scope):全局作用域是在整個(gè) JavaScript 程序中都可訪問的作用域。在全局作用域中聲明的變量和函數(shù)可以被項(xiàng)目中的任何部分訪問。
- 函數(shù)作用域(Function Scope):函數(shù)作用域是在函數(shù)內(nèi)部聲明的變量所擁有的作用域。這意味著在函數(shù)外部無法訪問函數(shù)內(nèi)部聲明的變量。每當(dāng)創(chuàng)建一個(gè)函數(shù)時(shí),就會(huì)創(chuàng)建一個(gè)新的函數(shù)作用域。
- 塊級(jí)作用域(Block Scope):塊級(jí)作用域是在代碼塊(通常是由花括號(hào)?
{}
?包裹的代碼)內(nèi)部聲明的變量所擁有的作用域。在ES6之前,JavaScript中并沒有塊級(jí)作用域,變量的作用域只限于函數(shù)作用域和全局作用域。但是,通過使用?let
?和?const
?關(guān)鍵字,我們可以在if語句、循環(huán)等代碼塊中創(chuàng)建塊級(jí)作用域。
需要注意的是:ES6引入了?let
?和?const
?關(guān)鍵字,它們具有塊級(jí)作用域。而?var
?關(guān)鍵字則具有函數(shù)作用域,但在沒有塊級(jí)作用域的情況下,它也可以用于在整個(gè)函數(shù)作用域中聲明變量。因此,在編寫 JavaScript 代碼時(shí),了解作用域是非常重要的,以避免變量沖突和不正確的訪問。
(2)作用域鏈?zhǔn)鞘裁矗?/p>
作用域鏈(Scope Chain)是 JavaScript 中一種機(jī)制,用于解析變量的引用和查找變量的值。它是由多個(gè)嵌套的作用域形成的鏈?zhǔn)浇Y(jié)構(gòu)。
當(dāng)在函數(shù)內(nèi)部訪問一個(gè)變量時(shí),JavaScript 引擎首先會(huì)在當(dāng)前函數(shù)的作用域中查找該變量。如果找到了變量,則直接使用該變量。如果在當(dāng)前作用域中沒有找到該變量,則會(huì)向上繼續(xù)查找,進(jìn)入上一層作用域,直到找到該變量或到達(dá)全局作用域?yàn)橹埂?/p>
這種層層嵌套的作用域鏈關(guān)系就是作用域鏈。作用域鏈的構(gòu)建是在函數(shù)創(chuàng)建的時(shí)候確定的,并且在函數(shù)執(zhí)行期間不會(huì)改變。