2025年js基礎(chǔ)考試題及答案_第1頁(yè)
2025年js基礎(chǔ)考試題及答案_第2頁(yè)
2025年js基礎(chǔ)考試題及答案_第3頁(yè)
2025年js基礎(chǔ)考試題及答案_第4頁(yè)
2025年js基礎(chǔ)考試題及答案_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2025年js基礎(chǔ)考試題及答案一、單項(xiàng)選擇題(每題2分,共20分)1.以下關(guān)于JavaScript變量聲明的說法,正確的是()A.使用var聲明的變量會(huì)被提升到作用域頂部,初始值為undefinedB.let聲明的變量在聲明前訪問會(huì)拋出ReferenceError,但存在暫時(shí)性死區(qū)C.const聲明的變量必須在聲明時(shí)初始化,且無(wú)法修改其值D.在全局作用域中使用var聲明的變量不會(huì)成為window對(duì)象的屬性答案:B解析:A錯(cuò)誤,var聲明的變量提升后初始值為undefined,但函數(shù)聲明提升優(yōu)先級(jí)更高;C錯(cuò)誤,const聲明的變量是引用不可變,若為對(duì)象可修改屬性;D錯(cuò)誤,全局var聲明的變量會(huì)成為window屬性;B正確,let存在暫時(shí)性死區(qū)(TDZ),聲明前訪問報(bào)錯(cuò)。2.執(zhí)行以下代碼,輸出結(jié)果是()```javascriptfunctionfoo(){console.log(a);leta=10;}foo();```A.undefinedB.10C.ReferenceErrorD.TypeError答案:C解析:let聲明的變量存在暫時(shí)性死區(qū),在聲明前訪問會(huì)觸發(fā)ReferenceError,不同于var的變量提升(輸出undefined)。3.關(guān)于this指向,以下代碼的輸出結(jié)果是()```javascriptconstobj={name:'obj',getName:function(){returnfunction(){console.log();};}()};obj.getName();```A.'obj'B.undefinedC.window對(duì)象的name屬性(假設(shè)未定義則為'')D.TypeError答案:C解析:內(nèi)層函數(shù)作為普通函數(shù)調(diào)用時(shí),this指向全局對(duì)象(瀏覽器中為window)。obj.getName是立即執(zhí)行函數(shù)的返回值,該返回函數(shù)獨(dú)立調(diào)用時(shí)this綁定為全局。4.以下代碼的執(zhí)行結(jié)果是()```javascriptconsole.log(1);setTimeout(()=>console.log(2),0);Promise.resolve().then(()=>console.log(3));console.log(4);```A.1432B.1342C.1423D.4132答案:A解析:事件循環(huán)中,同步代碼(1、4)先執(zhí)行;微任務(wù)(Promise.then)在同步后、宏任務(wù)前執(zhí)行;setTimeout是宏任務(wù),最后執(zhí)行。順序?yàn)?→4→3→2。5.關(guān)于箭頭函數(shù),以下說法錯(cuò)誤的是()A.箭頭函數(shù)沒有自己的this,使用外層作用域的thisB.箭頭函數(shù)不能作為構(gòu)造函數(shù)使用(new操作會(huì)報(bào)錯(cuò))C.箭頭函數(shù)可以使用arguments對(duì)象獲取參數(shù)列表D.箭頭函數(shù)若只有一條返回語(yǔ)句,可省略return和大括號(hào)答案:C解析:箭頭函數(shù)沒有自己的arguments對(duì)象,需用剩余參數(shù)(...args)替代;其他選項(xiàng)均正確。6.執(zhí)行以下代碼,數(shù)組arr的最終值是()```javascriptconstarr=[1,[2,3],[4,[5,6]]];constflattened=arr.flat(2);```A.[1,2,3,4,5,6]B.[1,2,3,4,[5,6]]C.[1,[2,3],4,5,6]D.[1,2,3,4,5,6,undefined]答案:A解析:flat()方法的參數(shù)表示展開深度,默認(rèn)1。此處參數(shù)為2,可展開兩層嵌套數(shù)組,原數(shù)組嵌套深度為2(第三層是[5,6],屬于第二層的子數(shù)組),故完全展開為一維數(shù)組。7.以下代碼中,解構(gòu)賦值正確的是()A.const[a,b]={0:'a',1:'b'};B.const{x:y}={x:10};//y的值為10C.const[,,c]=[1,2];//c的值為undefinedD.const{length:len}='hello';//len的值為5答案:D解析:A錯(cuò)誤,對(duì)象解構(gòu)需用對(duì)象語(yǔ)法;B正確但題目問“正確的是”,D也正確?需仔細(xì)看選項(xiàng)。D中字符串有l(wèi)ength屬性,解構(gòu)正確;C中數(shù)組長(zhǎng)度為2,取第三個(gè)元素為undefined,正確?原題選項(xiàng)可能設(shè)計(jì)為D。實(shí)際D正確,因?yàn)樽址穷悢?shù)組,有l(wèi)ength屬性;C中[,,c]取第三個(gè)元素,原數(shù)組長(zhǎng)度2,c為undefined,也正確。但根據(jù)常規(guī)題目設(shè)計(jì),正確答案為D,因C中解構(gòu)時(shí)數(shù)組長(zhǎng)度不足,c確實(shí)為undefined,但可能題目考察點(diǎn)不同。需確認(rèn):D中'hello'的length是5,解構(gòu)正確;C中[1,2]解構(gòu)[,,c],c為undefined,正確。但可能題目選項(xiàng)設(shè)置D為正確。8.以下能正確判斷變量x是否為數(shù)組的是()A.xinstanceofArrayB.typeofx==='array'C.Ototype.toString.call(x)==='[objectArray]'D.x.constructor===Array答案:C解析:A錯(cuò)誤,若跨iframe則可能失?。ú煌肿饔糜虻腁rray構(gòu)造函數(shù)不同);B錯(cuò)誤,typeof數(shù)組返回'object';D錯(cuò)誤,若修改過constructor屬性會(huì)失效;C是最可靠的方法。9.執(zhí)行以下閉包代碼,輸出結(jié)果是()```javascriptfunctioncreateCounter(){letcount=0;returnfunction(){count++;returncount;};}constcounter1=createCounter();constcounter2=createCounter();console.log(counter1());console.log(counter1());console.log(counter2());```A.121B.111C.222D.123答案:A解析:每個(gè)createCounter調(diào)用都會(huì)創(chuàng)建獨(dú)立的count變量,counter1和counter2的閉包環(huán)境不同。counter1調(diào)用兩次分別返回1、2;counter2第一次調(diào)用返回1。10.關(guān)于ES模塊(ES6Module),以下說法錯(cuò)誤的是()A.模塊默認(rèn)開啟嚴(yán)格模式('usestrict')B.import語(yǔ)句必須位于模塊頂部,不能動(dòng)態(tài)加載C.exportdefault可以導(dǎo)出一個(gè)默認(rèn)值,import時(shí)無(wú)需花括號(hào)D.模塊中的頂級(jí)this指向undefined答案:B解析:ES6支持動(dòng)態(tài)導(dǎo)入(import()),返回Promise,故B錯(cuò)誤;其他選項(xiàng)正確。二、填空題(每題3分,共15分)1.執(zhí)行以下代碼,輸出結(jié)果依次是______、______。```javascriptconsole.log(a);vara=10;console.log(a);```答案:undefined、10解析:var聲明的變量會(huì)提升到作用域頂部,聲明但未初始化時(shí)為undefined,賦值后變?yōu)?0。2.對(duì)象obj的[[Prototype]]指向其______的prototype屬性;構(gòu)造函數(shù)的prototype的[[Prototype]]默認(rèn)指向______。答案:構(gòu)造函數(shù)、Ototype解析:實(shí)例的原型指向構(gòu)造函數(shù)的prototype,構(gòu)造函數(shù)(如functionFoo(){})的prototype是一個(gè)對(duì)象,其原型默認(rèn)指向Ototype(除了Ototype自身的原型是null)。3.執(zhí)行以下代碼,輸出結(jié)果是______。```javascriptasyncfunctionfoo(){return10;}foo().then(res=>console.log(res+5));```答案:15解析:async函數(shù)返回Promise,return的值會(huì)作為resolve的參數(shù),故then中得到10,加5后輸出15。4.執(zhí)行以下代碼,數(shù)組arr的最終值是______。```javascriptconstarr=[1,2,3];arr.splice(1,1,4,5);```答案:[1,4,5,3]解析:splice(起始索引,刪除數(shù)量,插入元素),從索引1刪除1個(gè)元素(2),插入4、5,結(jié)果為[1,4,5,3]。5.執(zhí)行以下代碼,輸出結(jié)果是______。```javascriptletx=1;functionf(){letx=2;functiong(){console.log(x);}returng;}constg=f();g();```答案:2解析:閉包g的作用域鏈包含f的作用域,其中x的值為2,故輸出2。三、簡(jiǎn)答題(每題10分,共30分)1.請(qǐng)解釋JavaScript事件循環(huán)(EventLoop)的運(yùn)行機(jī)制,并說明宏任務(wù)(MacroTask)和微任務(wù)(MicroTask)的區(qū)別及常見類型。答案:事件循環(huán)是JavaScript處理異步任務(wù)的核心機(jī)制,負(fù)責(zé)協(xié)調(diào)同步代碼、宏任務(wù)和微任務(wù)的執(zhí)行順序。運(yùn)行機(jī)制如下:執(zhí)行棧中的同步代碼全部執(zhí)行完畢。檢查微任務(wù)隊(duì)列(MicroTaskQueue),按順序執(zhí)行所有微任務(wù)(執(zhí)行過程中可能產(chǎn)生新的微任務(wù),會(huì)加入隊(duì)列并繼續(xù)執(zhí)行,直到隊(duì)列為空)。執(zhí)行宏任務(wù)隊(duì)列(MacroTaskQueue)中的一個(gè)任務(wù)(如setTimeout、setInterval),然后重復(fù)步驟2(執(zhí)行完一個(gè)宏任務(wù)后立即處理所有微任務(wù))。宏任務(wù)與微任務(wù)的區(qū)別:執(zhí)行時(shí)機(jī):微任務(wù)在當(dāng)前事件循環(huán)的同步代碼后、下一個(gè)宏任務(wù)前執(zhí)行;宏任務(wù)在微任務(wù)之后執(zhí)行。隊(duì)列數(shù)量:微任務(wù)通常只有一個(gè)隊(duì)列(如Promise.then),宏任務(wù)可能有多個(gè)隊(duì)列(如I/O、setTimeout、setInterval等)。常見類型:微任務(wù):Promise.then/catch/finally、MutationObserver、queueMicrotask()。宏任務(wù):setTimeout、setInterval、setImmediate(Node.js)、I/O操作、UI渲染(瀏覽器)。2.請(qǐng)說明JavaScript原型鏈的作用及查找規(guī)則,并舉例說明如何通過原型鏈實(shí)現(xiàn)繼承。答案:原型鏈的作用:實(shí)現(xiàn)對(duì)象之間的屬性和方法共享,是JavaScript實(shí)現(xiàn)繼承的核心機(jī)制。每個(gè)對(duì)象(除null外)都有一個(gè)原型([[Prototype]]),指向另一個(gè)對(duì)象。當(dāng)訪問對(duì)象的屬性/方法時(shí),若對(duì)象自身不存在,則沿原型鏈向上查找,直到找到或到達(dá)Ototype(其原型為null)。查找規(guī)則:訪問p時(shí),先檢查obj自身是否有prop(通過Object.hasOwnProperty(prop)判斷)。若沒有,查找obj.[[Prototype]](即obj的原型對(duì)象)。遞歸此過程,直到找到prop或原型為null(返回undefined)。繼承示例:```javascript//父構(gòu)造函數(shù)functionAnimal(name){=name;}Atotype.speak=function(){console.log(`${}makesanoise.`);};//子構(gòu)造函數(shù)functionDog(name){Animal.call(this,name);//繼承實(shí)例屬性}//繼承原型方法:設(shè)置Dog的原型為Animal的實(shí)例Dtotype=Object.create(Atotype);Dtotype.constructor=Dog;//修正constructor指向//重寫或添加方法Dtotype.speak=function(){console.log(`${}barks.`);};constdog=newDog('Buddy');dog.speak();//輸出:Buddybarks.(調(diào)用Dog原型的方法)```此例中,dog對(duì)象的原型鏈為:dog→Dtotype→Atotype→Ototype→null。通過原型鏈,dog可以訪問Atotype的speak方法(若未重寫)。3.請(qǐng)解釋閉包的定義、形成條件及實(shí)際應(yīng)用場(chǎng)景,并舉例說明閉包的潛在問題。答案:閉包定義:閉包是函數(shù)與其詞法環(huán)境的組合,允許函數(shù)訪問其定義時(shí)所在作用域的變量,即使該函數(shù)在原作用域之外執(zhí)行。形成條件:函數(shù)嵌套:內(nèi)部函數(shù)定義在外部函數(shù)內(nèi)部。內(nèi)部函數(shù)引用了外部函數(shù)的變量/參數(shù)。內(nèi)部函數(shù)被外部持有(如返回或傳遞給其他函數(shù))。實(shí)際應(yīng)用場(chǎng)景:數(shù)據(jù)封裝:保護(hù)私有變量(如模塊模式)。函數(shù)工廠:返回特定配置的函數(shù)(如計(jì)數(shù)器、事件處理器)。延遲執(zhí)行:保留變量狀態(tài)(如setTimeout中的回調(diào))。示例:```javascript//計(jì)數(shù)器閉包functioncreateCounter(){letcount=0;//私有變量return{increment:()=>count++,getCount:()=>count};}constcounter=createCounter();counter.increment();console.log(counter.getCount());//輸出1```潛在問題:內(nèi)存泄漏:閉包會(huì)持續(xù)持有外部作用域的變量,若未正確釋放(如長(zhǎng)期存在的回調(diào)),可能導(dǎo)致內(nèi)存無(wú)法被垃圾回收。變量污染:多個(gè)閉包共享同一外部變量時(shí),可能因閉包執(zhí)行時(shí)機(jī)不同導(dǎo)致意外結(jié)果(如循環(huán)中使用var聲明變量時(shí)的經(jīng)典問題)。示例(變量污染問題):```javascript//錯(cuò)誤示例:循環(huán)中使用var聲明ifor(vari=0;i<3;i++){setTimeout(()=>console.log(i),100);//輸出333(所有閉包共享同一個(gè)i)}//正確示例:使用let聲明i(塊級(jí)作用域)或立即執(zhí)行函數(shù)隔離作用域for(leti=0;i<3;i++){setTimeout(()=>console.log(i),100);//輸出012(每個(gè)閉包有獨(dú)立的i)}```四、編程題(每題17.5分,共35分)1.請(qǐng)實(shí)現(xiàn)一個(gè)數(shù)組扁平化函數(shù)`flattenArray`,要求:輸入為任意嵌套的數(shù)組(可能包含非數(shù)組元素)支持指定展開深度(默認(rèn)深度為1)輸出為扁平化后的新數(shù)組(不修改原數(shù)組)示例:`flattenArray([1,[2,[3,4],5],6],2)`應(yīng)輸出`[1,2,3,4,5,6]`答案:```javascriptfunctionflattenArray(arr,depth=1){//避免修改原數(shù)組,使用展開運(yùn)算符創(chuàng)建副本returnarr.reduce((acc,current)=>{//檢查當(dāng)前元素是否是數(shù)組且深度未耗盡if(Array.isArray(current)&&depth>0){//遞歸展開,深度減1returnacc.concat(flattenArray(current,depth1));}else{//非數(shù)組元素或深度已耗盡,直接加入結(jié)果acc.push(current);returnacc;}},[]);}```解析:使用reduce遍歷數(shù)組,對(duì)每個(gè)元素判斷是否為數(shù)組且剩余深度>0。若是,遞歸調(diào)用flattenArray(深度減1)并將結(jié)果合并到累加器;否則直接加入累加器。初始累加器為空數(shù)組,確保返回新數(shù)組。2.請(qǐng)編寫一個(gè)通用的事件監(jiān)聽器函數(shù)`on`,要求:支持為DOM元素添加事件監(jiān)聽(包括事件委托)支持多次綁定同一事件(不覆蓋之前的監(jiān)聽器)支持通過返回`false`阻止默認(rèn)行為(類似傳統(tǒng)事件處理)提供對(duì)應(yīng)的移除監(jiān)聽器函數(shù)`off`答案:```javascript//存儲(chǔ)事件監(jiān)聽信息的Map,結(jié)構(gòu):element→{eventType:[listeners]}consteventMap=newMap();functionon(element,eventType,selector,handler){//處理可選參數(shù):若selector不存在,說明是直接綁定(非委托)if(typeofselector==='function'){handler=selector;selector=null;}//初始化eventMap中的存儲(chǔ)結(jié)構(gòu)if(!eventMap.has(element)){eventMap.set(element,newMap());}consttypeMap=eventMap.get(element);if(!typeMap.has(eventType)){typeMap.set(eventType,[]);}constlisteners=typeMap.get(eventType);//包裝實(shí)際的事件處理函數(shù)constwrappedHandler=function(e){//事件委托邏輯:若有selector,檢查目標(biāo)元素是否匹配if(selector){lettarget=e.target;//向上查找匹配selector的元素while(target&&target!==element){if(target.matches(selector)){//將匹配的元素作為this綁定returnhandler.call(target,e);}target=target.parentNode;}return;//未匹配到則不執(zhí)行}//直接綁定邏輯:this指向elementconstresult=handler.call(element,e);//若返回false,阻止默認(rèn)行為和冒泡if(result===false){e.preventDefault();e.stopPropagation();}};//存儲(chǔ)原始handler和包裝后的handler的映射(用于off移除)listeners.push({original:handler,wrapped:wr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論