版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2025年javascript期末考試試題及答案一、單項選擇題(共10題,每題2分,共20分)1.以下關于JavaScript數據類型的描述,錯誤的是()A.`typeofnull`返回"object"B.Symbol類型的值可以通過`newSymbol()`創(chuàng)建C.BigInt類型用于表示大于`2^53-1`的整數D.未初始化的變量使用`var`聲明時默認值為`undefined`2.執(zhí)行以下代碼,控制臺輸出的結果是()```javascriptconstobj={a:1,getb(){returnthis.a+1;}};Object.defineProperty(obj,'c',{value:2,enumerable:false});console.log(Object.keys(obj));```A.`['a','b','c']`B.`['a','b']`C.`['a','c']`D.`['a']`3.關于`this`指向,以下代碼執(zhí)行后輸出的結果是()```javascriptfunctionfoo(){console.log(this.x);}constobj1={x:1,foo:foo};constobj2={x:2,foo:obj1.foo};obj2.foo();```A.`1`B.`2`C.`undefined`D.報錯4.以下哪段代碼會導致事件循環(huán)中的微任務隊列被添加()A.`setTimeout(()=>console.log(1),0)`B.`Promise.resolve().then(()=>console.log(2))`C.`setImmediate(()=>console.log(3))`(假設運行在Node.js環(huán)境)D.`requestAnimationFrame(()=>console.log(4))`5.執(zhí)行以下代碼,最終`arr`的值是()```javascriptletarr=[1,[2,3],{a:4}];let[x,[y],z]=arr;x=10;y=20;z.a=40;```A.`[1,[20,3],{a:40}]`B.`[10,[20,3],{a:40}]`C.`[1,[2,3],{a:40}]`D.`[10,[2,3],{a:4}]`6.以下關于ES6`class`的說法,正確的是()A.`class`中的方法默認是枚舉的B.靜態(tài)方法(`static`)可以通過實例調用C.構造函數(`constructor`)中必須顯式返回對象D.繼承時`super()`必須在`this`被使用前調用7.執(zhí)行以下異步代碼,輸出順序正確的是()```javascriptasyncfunctionasync1(){console.log('async1start');awaitasync2();console.log('async1end');}asyncfunctionasync2(){console.log('async2');}console.log('scriptstart');setTimeout(()=>{console.log('setTimeout');},0);async1();newPromise(resolve=>{console.log('promise1');resolve();}).then(()=>{console.log('promise2');});console.log('scriptend');```A.scriptstart→async1start→async2→promise1→scriptend→async1end→promise2→setTimeoutB.scriptstart→async1start→async2→promise1→scriptend→promise2→async1end→setTimeoutC.scriptstart→async1start→async2→scriptend→promise1→async1end→promise2→setTimeoutD.scriptstart→async1start→async2→promise1→async1end→scriptend→promise2→setTimeout8.以下代碼中,`fn`的返回值是()```javascriptfunctionfn(){letcount=0;returnfunction(){count++;if(count>3){return;}returncount;};}constcounter=fn();counter();counter();constresult=counter();```A.`1`B.`2`C.`3`D.`undefined`9.關于JavaScript模塊系統(tǒng),以下說法錯誤的是()A.ES模塊(ESM)默認嚴格模式(`strictmode`)B.CommonJS模塊的`require`是同步加載的C.ES模塊中可以使用`module.exports`導出成員D.Node.js中`.mjs`文件默認作為ES模塊解析10.以下代碼執(zhí)行后,`totype`的指向是()```javascriptfunctionParent(){}functionChild(){}Ctotype=newParent();constobj=newChild();```A.`Parent`的實例B.`Ptotype`C.`Ctotype`D.`Ototype`二、填空題(共5題,每題3分,共15分)1.執(zhí)行`typeof(()=>{})`的結果是______。2.若要將字符串`"123"`轉換為數值類型且保留BigInt格式,應使用______方法。3.異步函數(`asyncfunction`)默認返回一個______對象,其狀態(tài)由函數內的`return`值或`throw`決定。4.正則表達式`/^1[3-9]\d{9}$/`可用于驗證______格式是否正確。5.若要阻止事件冒泡,應在事件處理函數中調用______方法。三、簡答題(共5題,每題8分,共40分)1.簡述事件委托(EventDelegation)的原理及其優(yōu)勢。2.對比`var`、`let`和`const`在變量聲明時的區(qū)別(需至少列出3點)。3.解釋閉包(Closure)的定義,并舉例說明其常見使用場景。4.描述Promise的三種狀態(tài)及其轉換條件,并用代碼示例說明狀態(tài)轉換過程。5.模塊化開發(fā)是現代JavaScript的重要實踐,簡述其核心優(yōu)勢及ES模塊(ESM)與CommonJS的主要差異。四、編程題(共2題,每題12.5分,共25分)1.實現一個函數`promiseAll`,其功能與`Promise.all`一致:接收一個可迭代對象(如數組),返回一個新Promise。當所有輸入的Promise都成功時,新Promise以結果數組resolve;若有任意一個Promise失敗,則新Promise立即以該失敗原因reject。(要求處理非Promise輸入,如直接傳入數值、字符串等)2.設計一個緩存函數`memoize`,要求:接收一個函數`fn`作為參數,返回一個新函數`memoizedFn`;`memoizedFn`調用時會緩存`fn`的計算結果,相同參數時直接返回緩存值;支持處理基本類型(如number、string)和對象類型(如Object、Array)的參數;可選擴展:添加緩存失效策略(如超時自動清除)。答案及解析一、單項選擇題1.B(Symbol不能通過`new`創(chuàng)建,需直接調用`Symbol()`)2.B(`Object.keys()`僅返回可枚舉的自身屬性,`b`是訪問器屬性但可枚舉,`c`的`enumerable`為`false`)3.B(`obj2.foo()`調用時,`this`指向`obj2`)4.B(微任務包括Promise的`then`、`catch`、`finally`,`setTimeout`是宏任務)5.C(解構賦值是復制操作,修改`x`和`y`不影響原數組,但對象是引用傳遞,修改`z.a`會影響原對象)6.D(繼承時`super()`必須在`this`前調用,否則報錯)7.B(事件循環(huán)順序:同步代碼→微任務→宏任務。同步代碼輸出`scriptstart`→`async1start`→`async2`→`promise1`→`scriptend`;微任務包括`async1`的`await`后代碼和`promise2`,順序為`promise2`→`async1end`;最后宏任務`setTimeout`)8.C(`count`初始為0,第一次調用后`count=1`返回1,第二次`count=2`返回2,第三次`count=3`返回3,第四次`count=4`返回`undefined`。題目中調用了三次,第三次返回3)9.C(ES模塊使用`export`/`import`,`module.exports`是CommonJS的導出方式)10.B(`Ctotype`被賦值為`Parent`的實例,該實例的`[[Prototype]]`指向`Ptotype`,因此`obj`的原型鏈為`obj→Ctotype(Parent實例)→Ptotype→Ototype`)二、填空題1."function"(函數的`typeof`是`"function"`)2.`BigInt("123")`(`BigInt`構造函數轉換字符串為BigInt類型)3.Promise(`async`函數自動包裝返回值為Promise)4.中國大陸手機號碼(以1開頭,第二位3-9,共11位)5.`event.stopPropagation()`(阻止事件冒泡的方法)三、簡答題1.原理:利用事件冒泡機制,將事件監(jiān)聽器綁定到父元素,通過`event.target`判斷實際觸發(fā)事件的子元素,間接處理子元素的事件。優(yōu)勢:減少事件監(jiān)聽器數量(尤其對子元素動態(tài)添加/刪除的場景)、提升性能、避免重復綁定和解綁操作。2.區(qū)別:作用域:`var`是函數作用域,`let`和`const`是塊級作用域(`{}`內);變量提升:`var`存在變量提升(聲明提前,賦值滯后),`let`和`const`存在暫時性死區(qū)(TDZ),聲明前不可使用;重新賦值:`var`和`let`可重新賦值,`const`聲明時必須初始化且不可重新賦值(對象屬性可修改)。3.定義:閉包是函數與其詞法環(huán)境的組合,允許函數訪問其外層作用域的變量,即使該函數在原作用域外執(zhí)行。場景:數據私有(如模塊模式,隱藏內部狀態(tài));函數工廠(返回依賴外部變量的函數,如計數器);事件處理函數(保留事件綁定的上下文)。示例:```javascriptfunctioncreateCounter(){letcount=0;returnfunction(){count++;returncount;};}constcounter=createCounter();console.log(counter());//1console.log(counter());//2(閉包保留了count的狀態(tài))```4.三種狀態(tài):Pending(等待):初始狀態(tài),未完成也未拒絕;Fulfilled(已成功):操作成功完成,有對應結果;Rejected(已失?。翰僮魇?,有失敗原因。轉換條件:Pending→Fulfilled:調用`resolve()`;Pending→Rejected:調用`reject()`或拋出錯誤。示例:```javascriptconstpromise=newPromise((resolve,reject)=>{setTimeout(()=>{if(Math.random()>0.5){resolve('Success');//Pending→Fulfilled}else{reject('Error');//Pending→Rejected}},1000);});```5.核心優(yōu)勢:代碼解耦:模塊獨立,職責單一;依賴管理:明確模塊間的依賴關系;復用性:模塊可被多次引用;作用域隔離:避免全局污染。ESM與CommonJS差異:加載方式:ESM靜態(tài)導入(編譯時解析),CommonJS動態(tài)加載(運行時解析);導出類型:ESM導出的是“實時綁定”(導出值變化時導入方同步更新),CommonJS導出的是“值的拷貝”;語法:ESM使用`import`/`export`,CommonJS使用`require`/`module.exports`;環(huán)境支持:ESM是ES6標準,廣泛支持現代瀏覽器和Node.js(需`.mjs`或配置`"type":"module"`),CommonJS是Node.js傳統(tǒng)模塊系統(tǒng)。四、編程題1.`promiseAll`實現:```javascriptfunctionpromiseAll(iterable){returnnewPromise((resolve,reject)=>{constresults=[];letcompleted=0;consttotal=[...iterable].length;if(total===0){resolve(results);return;}[...iterable].forEach((item,index)=>{//處理非Promise輸入,轉換為PromisePromise.resolve(item).then((value)=>{results[index]=value;//按順序存儲結果completed++;if(completed===total){resolve(results);}}).catch((error)=>{reject(error);//任意一個失敗立即reject});});});}```關鍵點:使用`Promise.resolve()`將非Promise輸入轉換為Promise;按順序存儲結果(通過`index`對應位置);統(tǒng)計完成數量,全部完成后`resolve`結果數組;任意一個失敗時立即`reject`。2.`memoize`實現(含緩存失效策略):```javascriptfunctionmemoize(fn,options={}){const{timeout=5000}=options;//默認緩存5秒constcache=newMap();//存儲緩存(鍵:參數序列化后的值,值:{value,timestamp})functiongetCacheKey(args){//處理對象類型參數,使用JSON.stringify提供唯一鍵(需注意循環(huán)引用問題)returnargs.map(arg=>{if
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 妊娠期多器官功能衰竭的基因保護策略
- 車輛工程力學試題及答案
- 女性職業(yè)性呼吸系統(tǒng)疾病的影像表現差異
- 頭頸鱗癌免疫治療的多組學整合策略
- 大數據在職業(yè)塵肺病早期篩查中的應用模型
- 大數據分析齲病危險因素與預防策略
- 調酒考試題及答案
- 多部門協(xié)作的社區(qū)慢病環(huán)境干預實踐
- 多組學整合的腫瘤代謝異質性分析
- 2025年中職(建筑工程施工)施工技術階段測試題及答案
- 魁北克腰痛障礙評分表(Quebec-Baclain-Disability-Scale-QBPDS)
- 實驗室生物安全培訓-課件
- 八年級上冊歷史【全冊】知識點梳理背誦版
- 《工會法》及《勞動合同法》教學課件
- 第章交流穩(wěn)態(tài)電路
- 股權轉讓協(xié)議書常電子版(2篇)
- 2023年副主任醫(yī)師(副高)-推拿學(副高)考試歷年高頻考點真題演練附帶含答案
- 產品質量法課件
- 《食品包裝學(第三版)》教學PPT課件整套電子講義
- plc電機正反轉-教案
- 燃機三菱控制系統(tǒng)簡述課件
評論
0/150
提交評論