版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2025年高頻基礎web前端面試題及答案1.如何理解HTML語義化?HTML語義化指通過使用符合內(nèi)容含義的標簽(如header、nav、article、section、footer等)描述頁面結(jié)構(gòu),而非僅用div、span等無意義標簽。其核心價值體現(xiàn)在:①提升可訪問性,屏幕閱讀器能準確解析內(nèi)容結(jié)構(gòu),幫助視障用戶;②優(yōu)化SEO,搜索引擎可更精準抓取內(nèi)容主題;③增強代碼可維護性,開發(fā)者通過標簽名快速理解內(nèi)容模塊;④未來兼容性,語義化標簽更符合W3C標準,適應技術(shù)演進。例如,用nav包裹導航鏈接比div+class更直觀,用article標記獨立文章內(nèi)容比div更符合語義。2.標準盒模型與IE盒模型的區(qū)別是什么?CSS盒模型由content、padding、border、margin組成,區(qū)別在于width/height的計算范圍。標準盒模型(W3C盒模型)中,width/height僅包含content區(qū)域,padding和border在width/height之外;IE盒模型(怪異盒模型)中,width/height包含content+padding+border,實際內(nèi)容區(qū)域?qū)挾葹閣idthpaddingborder。可通過box-sizing屬性控制:box-sizing:content-box(標準盒模型,默認值);box-sizing:border-box(IE盒模型)。開發(fā)中常用box-sizing:border-box統(tǒng)一盒模型,避免因padding/border導致布局錯位。3.簡述JavaScript中this的綁定規(guī)則。this的指向在函數(shù)執(zhí)行時動態(tài)確定,核心規(guī)則有4種:①默認綁定:非嚴格模式下,獨立函數(shù)調(diào)用時this指向全局對象(瀏覽器中為window,Node.js中為global);嚴格模式下為undefined。例如functionfoo(){console.log(this)}(),非嚴格模式輸出window。②隱式綁定:函數(shù)作為對象方法調(diào)用時,this指向該對象。如obj.foo(),foo內(nèi)部的this是obj。③顯式綁定:通過call、apply、bind強制指定this。call和apply立即執(zhí)行函數(shù),區(qū)別在于參數(shù)傳遞方式(call接收參數(shù)列表,apply接收數(shù)組);bind返回一個新函數(shù),this被永久綁定。④new綁定:通過new調(diào)用構(gòu)造函數(shù)時,this指向新創(chuàng)建的實例對象。若構(gòu)造函數(shù)返回對象,則覆蓋this;否則返回this。4.如何實現(xiàn)一個數(shù)組去重函數(shù)?要求考慮NaN和對象類型。數(shù)組去重需處理基礎類型和引用類型?;A類型可通過Set去重,但Set認為NaN等于自身(ES6特性),而Object.is(NaN,NaN)為true。對象類型需自定義判斷邏輯(如比較JSON字符串或特定屬性)。示例實現(xiàn):functionunique(arr){constmap=newMap();//用Map存儲已存在的項constres=[];for(constitemofarr){//處理基礎類型:使用JSON.stringify區(qū)分NaN和其他值constkey=typeofitem!=='object'||item===null?JSON.stringify(item)://對象類型:假設根據(jù)id去重,可調(diào)整為其他唯一標識item.id!==undefined?`obj_${item.id}`:JSON.stringify(item);if(!map.has(key)){map.set(key,true);res.push(item);}}returnres;}//測試用例console.log(unique([1,2,2,NaN,NaN,{id:1},{id:1},{id:2}]));//輸出:[1,2,NaN,{id:1},{id:2}]5.解釋事件循環(huán)(EventLoop)的執(zhí)行機制。事件循環(huán)是JavaScript處理異步任務的核心機制,主要涉及調(diào)用棧(CallStack)、任務隊列(TaskQueue)和微任務隊列(MicrotaskQueue)。執(zhí)行流程:①同步代碼依次入棧執(zhí)行,完成后清空調(diào)用棧;②檢查微任務隊列(由Promise、MutationObserver等產(chǎn)生),按順序執(zhí)行所有微任務;③執(zhí)行宏任務隊列中的一個任務(由setTimeout、setInterval、I/O、UI事件等產(chǎn)生),完成后再次檢查微任務隊列;④重復步驟②③,形成循環(huán)。關(guān)鍵規(guī)則:微任務在宏任務之前執(zhí)行,每輪事件循環(huán)僅執(zhí)行一個宏任務,但會執(zhí)行完所有微任務。例如:console.log('scriptstart');//同步任務setTimeout(()=>{//宏任務console.log('setTimeout');},0);Promise.resolve().then(()=>{//微任務console.log('promise1');Promise.resolve().then(()=>{console.log('promise2');});});//輸出順序:scriptstart→promise1→promise2→setTimeout6.CSS中Flex布局的常用屬性有哪些?分別描述其作用。Flex布局通過display:flex或display:inline-flex將容器設為彈性容器,子元素成為彈性項。容器屬性:flex-direction:決定主軸方向(row[默認,水平從左到右]、row-reverse[水平從右到左]、column[垂直從上到下]、column-reverse[垂直從下到上])。flex-wrap:控制彈性項換行(nowrap[默認,不換行]、wrap[換行,第一行在上]、wrap-reverse[換行,第一行在下])。justify-content:主軸對齊方式(flex-start[默認,左對齊]、flex-end[右對齊]、center[居中]、space-between[兩端對齊,間隔相等]、space-around[每項兩側(cè)間隔相等,首尾間隔為中間一半])。align-items:交叉軸單行對齊(flex-start[頂部對齊]、flex-end[底部對齊]、center[居中]、baseline[基線對齊]、stretch[默認,拉伸填充])。align-content:交叉軸多行對齊(需flex-wrap為wrap/wrap-reverse,取值類似justify-content)。彈性項屬性:flex:flex-grow(放大比例,默認0)、flex-shrink(縮小比例,默認1)、flex-basis(初始尺寸,默認auto)的簡寫。常用值:flex:1(等價于110%,占滿剩余空間)。align-self:覆蓋容器的align-items,單獨設置交叉軸對齊方式。7.如何判斷一個變量是數(shù)組類型?JavaScript中判斷數(shù)組需考慮不同環(huán)境(如iframe跨窗口),可靠方法包括:①Array.isArray():ES5新增,直接判斷是否為數(shù)組,兼容性良好(IE9+)。②Ototype.toString.call():返回[objectArray],適用于所有環(huán)境。③instanceof:arrinstanceofArray,但跨窗口時(如iframe),不同窗口的Array構(gòu)造函數(shù)不同,可能返回false。④constructor:arr.constructor===Array,但constructor可被修改(如通過Object.defineProperty),不可靠。推薦使用前兩種方法,優(yōu)先Array.isArray()。示例:constarr=[1,2,3];console.log(Array.isArray(arr));//trueconsole.log(Ototype.toString.call(arr)==='[objectArray]');//true8.簡述Vue3響應式原理(基于Proxy)。Vue3使用Proxy替代Vue2的Object.defineProperty實現(xiàn)響應式,核心步驟:①創(chuàng)建響應式對象時,用Proxy包裹目標對象,攔截所有屬性的get、set、delete等操作。②get攔截時,收集依賴(將當前活躍的副作用函數(shù)存入targetMap中,鍵為目標對象,子鍵為屬性名,值為副作用函數(shù)集合)。③set/delete攔截時,觸發(fā)依賴(從targetMap中獲取對應副作用函數(shù)集合,依次執(zhí)行)。④通過Reflect調(diào)用原始對象的方法,保證行為正確性(如處理繼承屬性)。優(yōu)勢:Proxy可攔截對象的所有操作(包括新增/刪除屬性、數(shù)組索引修改),無需Vue2中$set/$delete的補?。恢С智短讓ο蟮捻憫剑J深層響應式,可通過shallowReactive創(chuàng)建淺層響應式)。9.解釋HTTP緩存策略(強緩存與協(xié)商緩存)。HTTP緩存通過請求/響應頭控制,分為強緩存和協(xié)商緩存:①強緩存:瀏覽器直接使用本地緩存,無需請求服務器。通過Cache-Control(HTTP/1.1)或Expires(HTTP/1.0)實現(xiàn)。Cache-Control優(yōu)先級更高,常用值:max-age(緩存有效秒數(shù))、no-cache(不使用強緩存,需協(xié)商)、no-store(禁用所有緩存)。例如響應頭Cache-Control:max-age=3600,表示資源1小時內(nèi)有效。②協(xié)商緩存:強緩存失效時,瀏覽器發(fā)送請求驗證資源是否更新。若未更新,返回304NotModified,使用本地緩存;否則返回200和新資源。通過Last-Modified/If-Modified-Since(基于最后修改時間)或ETag/If-None-Match(基于資源哈希值)實現(xiàn)。ETag優(yōu)先級更高,可解決Last-Modified的精度問題(如1秒內(nèi)多次修改)和文件內(nèi)容未變但時間變化的問題(如重新保存未修改文件)。示例流程:首次請求→服務器返回200,攜帶Cache-Control:max-age=60和ETag:"abc123"→60秒內(nèi)再次請求→強緩存生效,直接使用本地→60秒后請求→發(fā)送If-None-Match:"abc123"→服務器檢查ETag,未變化則返回304→使用緩存。10.如何實現(xiàn)水平垂直居中?至少寫出5種方法。①Flex布局(最常用):父容器:display:flex;justify-content:center;align-items:center;②Grid布局:父容器:display:grid;place-items:center;③絕對定位+transform(無需知道子元素尺寸):父容器:position:relative;子元素:position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);④絕對定位+margin:auto(需固定寬高):父容器:position:relative;子元素:position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;width:100px;height:100px;⑤行內(nèi)元素(如文本):父容器設置line-height等于height,text-align:center(垂直居中需單行);⑥Table布局:父容器:display:table;子容器:display:table-cell;vertical-align:middle;text-align:center;11.解釋JavaScript中的閉包及其應用場景。閉包是函數(shù)與其詞法環(huán)境的組合,即函數(shù)能訪問其定義時所在作用域的變量,即使該函數(shù)在其他作用域執(zhí)行。形成條件:函數(shù)嵌套,內(nèi)部函數(shù)引用外部函數(shù)的變量,且內(nèi)部函數(shù)在外部作用域被保存(如作為返回值或事件回調(diào))。核心特性:①外部作用域變量不會被垃圾回收(閉包持有其引用);②變量值保留在內(nèi)存中,可被后續(xù)調(diào)用修改。應用場景:①數(shù)據(jù)封裝(私有變量):通過閉包模擬類的私有方法/屬性,避免全局污染。例如:functionCounter(){letcount=0;return{increment(){count++},getCount(){returncount}};}constcounter=Counter();counter.increment();console.log(counter.getCount());//1②事件回調(diào)(保留狀態(tài)):在循環(huán)中為元素綁定事件時,通過閉包保存當前循環(huán)變量。例如:for(leti=0;i<5;i++){document.querySelectorAll('button')[i].addEventListener('click',(function(idx){return()=>console.log(idx);})(i));}③函數(shù)柯里化:將多參數(shù)函數(shù)轉(zhuǎn)換為單參數(shù)函數(shù)鏈,通過閉包保存已傳入的參數(shù)。例如:functionadd(a){returnfunction(b){returna+b;};}constadd5=add(5);console.log(add5(3));//812.簡述瀏覽器的渲染流程。瀏覽器渲染流程分為以下步驟:①解析HTML:提供DOM樹(DocumentObjectModel),將標簽轉(zhuǎn)換為節(jié)點對象。②解析CSS:提供CSSOM樹(CSSObjectModel),將CSS規(guī)則轉(zhuǎn)換為樣式對象(包括層疊后的計算值)。③構(gòu)建渲染樹(RenderTree):合并DOM樹和CSSOM樹,排除不可見元素(如display:none),提供包含每個可見節(jié)點的樣式信息的樹。④布局(Layout/Reflow):根據(jù)渲染樹計算每個節(jié)點的幾何信息(位置、尺寸),確定在視口中的布局。⑤繪制(Paint/Repaint):將布局后的節(jié)點繪制到屏幕,填充顏色、陰影等視覺屬性。⑥合成(Composite):將多個圖層(如定位元素、3D變換元素)合并為最終屏幕圖像,減少重繪開銷。關(guān)鍵優(yōu)化點:避免頻繁觸發(fā)重排(如修改布局屬性width、height、margin等),可通過將元素脫離文檔流(position:absolute/fixed)或使用CSS的transform(觸發(fā)合成層)減少重排次數(shù)。13.如何解決跨域問題?至少寫出4種方法。跨域指瀏覽器同源策略限制(協(xié)議、域名、端口均相同),常見解決方案:①CORS(跨域資源共享):服務器設置響應頭Access-Control-Allow-Origin(允許的源,如或具體域名)、Access-Control-Allow-Methods(允許的方法,如GET,POST)、Access-Control-Allow-Headers(允許的請求頭)。適用于所有HTTP方法,需服務器配合。②JSONP(JSONwithPadding):利用script標簽無同源限制的特性,前端定義回調(diào)函數(shù),請求URL攜帶callback參數(shù)(如?callback=handleData),服務器返回handleData(數(shù)據(jù))的腳本,前端執(zhí)行回調(diào)。僅支持GET方法,存在XSS風險。③反向代理:前端請求本地服務器(如WebpackDevServer的proxy配置),本地服務器轉(zhuǎn)發(fā)請求到目標服務器,繞過瀏覽器同源策略。適用于開發(fā)環(huán)境,生產(chǎn)環(huán)境需服務器配置。④WebSocket:基于ws/wss協(xié)議,不受同源策略限制,通過握手階段協(xié)商跨域。⑤postMessage:用于跨窗口通信(如iframe與父窗口),通過window.postMessage(data,targetOrigin)發(fā)送消息,targetOrigin指定允許的源,接收方監(jiān)聽message事件。14.解釋ES6模塊化與CommonJS的區(qū)別。ES6模塊化(靜態(tài)導入)與CommonJS(動態(tài)導入)的核心區(qū)別:①加載時機:ES6模塊在編譯時靜態(tài)分析(import/export),支持TreeShaking(移除未使用的代碼);CommonJS在運行時動態(tài)加載(require/module.exports),無法靜態(tài)分析。②模塊特性:ES6模塊輸出的是值的引用(導出的變量是只讀的,修改原變量會影響導入方);CommonJS輸出的是值的拷貝(導出后原變量修改不影響已導入的值)。③循環(huán)加載:ES6模塊在循環(huán)加載時,會返回已初始化的部分;CommonJS可能返回未完成初始化的模塊。④適用環(huán)境:ES6模塊主要用于瀏覽器(通過<scripttype="module">)和ES6+環(huán)境;CommonJS用于Node.js。示例對比://ES6模塊exportletcount=0;exportfunctionincrement(){count++}//導入方修改count會報錯(只讀),但increment()可修改原count//CommonJSmodule.exports={count:0,increment(){this.count++}};//導入方修改module.exports.count的值是拷貝,不影響原模塊15.簡述React中useState的工作原理。useState是ReactHooks的狀態(tài)管理工具,核心原理:①函數(shù)組件每次渲染時,Hooks按調(diào)用順序被記錄在一個鏈表結(jié)構(gòu)中(內(nèi)部稱為“memoizedState”數(shù)組)。②首次渲染時,useState接收初始值(僅在首次渲染時生效),創(chuàng)建狀態(tài)對象(包含當前狀態(tài)值和更新函數(shù)),存入memoizedState。③調(diào)用更新函數(shù)(如setState)時,React標記組件需要重新渲染,并將新狀態(tài)值存入memoizedState對應位置。④重新渲染時,useState按順序從memoizedState中讀取當前狀態(tài)值,返回新的狀態(tài)和更新函數(shù)。關(guān)鍵點:①Hooks必須按順序調(diào)用(不能在條件/循環(huán)/嵌套函數(shù)中調(diào)用),否則會破壞鏈表順序;②更新函數(shù)是異步的(批量更新優(yōu)化),多次調(diào)用可能合并;③函數(shù)式更新(setState(prev=>prev+1))可確保使用最新狀態(tài)。16.CSS中BFC(塊格式化上下文)是什么?如何觸發(fā)?應用場景有哪些?BFC是CSS中一個獨立的渲染區(qū)域,內(nèi)部元素的布局不受外部影響,且與外部元素隔離。觸發(fā)條件:①根元素(html);②float值不為none;③position為absolute或fixed;④display為inline-block、table-cell、table-caption、flex、grid;⑤overflow值不為visible(如hidden、auto、scroll)。應用場景:①解決margin塌陷(相鄰塊級元素的上下margin合并):將其中一個元素放入BFC容器中,margin不再合并。②清除浮動(防止父元素高度塌陷):父元素觸發(fā)BFC后,會包含浮動子元素的高度。③防止文字環(huán)繞浮動元素:BFC容器與浮動元素并列時,不會被浮動元素覆蓋,文字正常排列。17.如何實現(xiàn)一個防抖(debounce)函數(shù)?防抖函數(shù)用于限制函數(shù)在短時間內(nèi)多次調(diào)用,僅在最后一次調(diào)用后執(zhí)行。常見場景:搜索輸入框?qū)崟r搜索(減少請求次數(shù))、窗口resize事件處理。實現(xiàn)關(guān)鍵點:使用定時器,每次調(diào)用時清除前一個定時器,重新設置新定時器。若需立即執(zhí)行(第一次觸發(fā)時執(zhí)行,之后等待),可增加immediate參數(shù)。示例實現(xiàn)(含立即執(zhí)行選項):functiondebounce(fn,wait,immediate=false){lettimer=null;returnfunction(...args){constcontext=this;if(timer)clearTimeout(timer);if(immediate){//首次調(diào)用且未在等待期內(nèi)時執(zhí)行constcallNow=!timer;if(callNow){fn.apply(context,args);}//設置定時器,等待期結(jié)束后清空timer,允許下次立即執(zhí)行timer=setTimeout(()=>{timer=null;},wait);}else{timer=setTimeout(()=>{fn.apply(context,args);},wait);}};}//使用示例constsearchInput=document.getElementById('search');searchInput.addEventListener('input',debounce((e)=>{console.log('搜索:',e.target.value);},500));18.解釋JavaScript中的原型鏈。原型鏈是JavaScript實現(xiàn)繼承的機制。每個對象(除null外)都有一個[[Prototype]]內(nèi)部屬性(可通過Object.getPrototypeOf()獲取),指向其原型對象。原型對象本身也有[[Prototype]],最終指向Ototype,其[[Prototype]]為null,形成原型鏈。作用:對象訪問屬性時,先查找自身屬性,若不存在則沿原型鏈向上查找,直到找到或到達null。示例:functionPerson(name){=name;}Ptotype.sayHello=function(){console.log(`Hello,${}`);};constp=newPerson('Alice');console.log(p.__proto__===Ptotype);//trueconsole.log(Ptotype.__proto__===Ototype);//trueconsole.log(Ototype.__pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年安徽中醫(yī)藥高等??茖W校高職單招職業(yè)適應性測試備考試題有答案解析
- 2026年黑龍江旅游職業(yè)技術(shù)學院單招職業(yè)技能筆試模擬試題帶答案解析
- 兒科護理心理護理策略
- 醫(yī)療人工智能在輔助決策中的應用
- 護理專業(yè)課程體系建設與改革研究
- 醫(yī)療健康保險的區(qū)塊鏈技術(shù)應用
- 醫(yī)療資源分配與護理效率提升
- 2026年黑龍江商業(yè)職業(yè)學院高職單招職業(yè)適應性測試備考試題帶答案解析
- 思修題庫及答案
- 2026年安徽郵電職業(yè)技術(shù)學院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 高??蒲许椖苛㈨椉肮芾硪?guī)范
- 鈑噴質(zhì)檢員考試題及答案
- 學生安全教育家長會課件
- 2026年云南省高二物理學業(yè)水平合格考試卷試題(含答案詳解)
- 完整版污水處理池施工組織設計方案
- 2025版數(shù)據(jù)安全風險評估報告(模板)
- 國開11073+《法律文書》期末復習資料
- 鋼結(jié)構(gòu)工程監(jiān)理合同
- 企業(yè)ERP系統(tǒng)維護操作手冊
- 眼耳鼻喉科2019年院感工作計劃
- 大型鋼鐵企業(yè)關(guān)鍵備件聯(lián)儲聯(lián)備供應鏈戰(zhàn)略共享探討
評論
0/150
提交評論