2025年javascript期末考试试题及答案_第1页
2025年javascript期末考试试题及答案_第2页
2025年javascript期末考试试题及答案_第3页
2025年javascript期末考试试题及答案_第4页
2025年javascript期末考试试题及答案_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年javascript期末考试试题及答案一、单项选择题(共10题,每题2分,共20分)1.以下关于JavaScript数据类型的描述,错误的是()A.`typeofnull`返回"object"B.Symbol类型的值可以通过`newSymbol()`创建C.BigInt类型用于表示大于`2^53-1`的整数D.未初始化的变量使用`var`声明时默认值为`undefined`2.执行以下代码,控制台输出的结果是()```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`指向,以下代码执行后输出的结果是()```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.以下哪段代码会导致事件循环中的微任务队列被添加()A.`setTimeout(()=>console.log(1),0)`B.`Promise.resolve().then(()=>console.log(2))`C.`setImmediate(()=>console.log(3))`(假设运行在Node.js环境)D.`requestAnimationFrame(()=>console.log(4))`5.执行以下代码,最终`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.静态方法(`static`)可以通过实例调用C.构造函数(`constructor`)中必须显式返回对象D.继承时`super()`必须在`this`被使用前调用7.执行以下异步代码,输出顺序正确的是()```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模块系统,以下说法错误的是()A.ES模块(ESM)默认严格模式(`strictmode`)B.CommonJS模块的`require`是同步加载的C.ES模块中可以使用`module.exports`导出成员D.Node.js中`.mjs`文件默认作为ES模块解析10.以下代码执行后,`totype`的指向是()```javascriptfunctionParent(){}functionChild(){}Ctotype=newParent();constobj=newChild();```A.`Parent`的实例B.`Ptotype`C.`Ctotype`D.`Ototype`二、填空题(共5题,每题3分,共15分)1.执行`typeof(()=>{})`的结果是______。2.若要将字符串`"123"`转换为数值类型且保留BigInt格式,应使用______方法。3.异步函数(`asyncfunction`)默认返回一个______对象,其状态由函数内的`return`值或`throw`决定。4.正则表达式`/^1[3-9]\d{9}$/`可用于验证______格式是否正确。5.若要阻止事件冒泡,应在事件处理函数中调用______方法。三、简答题(共5题,每题8分,共40分)1.简述事件委托(EventDelegation)的原理及其优势。2.对比`var`、`let`和`const`在变量声明时的区别(需至少列出3点)。3.解释闭包(Closure)的定义,并举例说明其常见使用场景。4.描述Promise的三种状态及其转换条件,并用代码示例说明状态转换过程。5.模块化开发是现代JavaScript的重要实践,简述其核心优势及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`创建,需直接调用`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(事件循环顺序:同步代码→微任务→宏任务。同步代码输出`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.原理:利用事件冒泡机制,将事件监听器绑定到父元素,通过`event.target`判断实际触发事件的子元素,间接处理子元素的事件。优势:减少事件监听器数量(尤其对子元素动态添加/删除的场景)、提升性能、避免重复绑定和解绑操作。2.区别:作用域:`var`是函数作用域,`let`和`const`是块级作用域(`{}`内);变量提升:`var`存在变量提升(声明提前,赋值滞后),`let`和`const`存在暂时性死区(TDZ),声明前不可使用;重新赋值:`var`和`let`可重新赋值,`const`声明时必须初始化且不可重新赋值(对象属性可修改)。3.定义:闭包是函数与其词法环境的组合,允许函数访问其外层作用域的变量,即使该函数在原作用域外执行。场景:数据私有(如模块模式,隐藏内部状态);函数工厂(返回依赖外部变量的函数,如计数器);事件处理函数(保留事件绑定的上下文)。示例:```javascriptfunctioncreateCounter(){letcount=0;returnfunction(){count++;returncount;};}constcounter=createCounter();console.log(counter());//1console.log(counter());//2(闭包保留了count的状态)```4.三种状态:Pending(等待):初始状态,未完成也未拒绝;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.核心优势:代码解耦:模块独立,职责单一;依赖管理:明确模块间的依赖关系;复用性:模块可被多次引用;作用域隔离:避免全局污染。ESM与CommonJS差异:加载方式:ESM静态导入(编译时解析),CommonJS动态加载(运行时解析);导出类型:ESM导出的是“实时绑定”(导出值变化时导入方同步更新),CommonJS导出的是“值的拷贝”;语法:ESM使用`import`/`export`,CommonJS使用`require`/`module.exports`;环境支持:ESM是ES6标准,广泛支持现代浏览器和Node.js(需`.mjs`或配置`"type":"module"`),CommonJS是Node.js传统模块系统。四、编程题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`对应位置);统计完成数量,全部完成后`resolve`结果数组;任意一个失败时立即`reject`。2.`memoize`实现(含缓存失效策略):```javascriptfunctionmemoize(fn,options={}){const{timeout=5000}=options;//默认缓存5秒constcache=newMap();//存储缓存(键:参数序列化后的值,值:{value,timestamp})functiongetCacheKey(args){//处理对象类型参数,使用JSON.stringify提供唯一键(需注意循环引用问题)returnargs.map(arg=>{if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论