版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年js期中测试题答案
一、单项选择题1.C2.D3.A4.B5.C6.A7.D8.B9.C10.A二、填空题1.原型链2.`addEventListener`3.`Promise.resolve()`4.块级作用域5.`JSON.stringify()`6.`event.stopPropagation()`7.`Map`8.尾调用优化9.`Proxy`10.`Symbol`三、判断题1.×2.√3.×4.√5.×6.√7.×8.√9.×10.√四、简答题1.闭包的定义与实例闭包指函数及其周围状态的引用捆绑形成的组合。当函数能记住并访问其词法作用域时产生闭包,即使该函数在作用域外执行。例如计数器函数:```javascriptfunctioncreateCounter(){letcount=0;returnfunction(){return++count;};}constcounter=createCounter();counter();//1```此例中返回的函数持有对`count`的引用,形成闭包。闭包实现封装私有状态,常用于模块化、事件处理及高阶函数。2.事件循环机制事件循环是JS实现并发的核心机制,包括调用栈、任务队列和微任务队列。执行流程:-同步代码执行,推入调用栈-异步回调(如`setTimeout`)进入任务队列-`Promise.then()`进入微任务队列-调用栈清空后,优先执行所有微任务,再取任务队列首个宏任务执行此机制确保非阻塞执行,但需注意微任务优先级高于宏任务,避免长任务阻塞UI渲染。3.原型链继承实现原型链继承通过`Object.create()`或构造函数的`prototype`属性实现:```javascriptfunctionAnimal(name){=name;}Atotype.speak=function(){console.log(`${}makessound`);};functionDog(name){Animal.call(this,name);}Dtotype=Object.create(Atotype);Dtotype.constructor=Dog;```子类`Dog`通过重写原型链继承`Animal`方法,结合构造函数窃取属性。优势是方法复用,但需注意引用类型共享风险。4.Promise.all与Promise.race区别-`Promise.all([p1,p2])`:等待所有Promise解决,返回结果数组;任一失败则立即拒绝-`Promise.race([p1,p2])`:取首个解决或拒绝的Promise结果适用场景:-`all`:需多个异步操作全部完成(如并发请求)-`race`:超时控制(`race(fetch(),timeoutPromise)`)五、讨论题1.箭头函数与传统函数的差异箭头函数无自身`this`、`arguments`、`super`和`new.target`,其`this`继承自外层作用域。传统函数的`this`取决于调用方式(动态绑定)。适用场景:-箭头函数:回调函数(如`arr.map(x=>x2)`)避免`this`绑定问题-传统函数:需动态`this`(事件处理器)、构造函数、生成器函数箭头函数不可作为构造函数,无`prototype`属性,简化代码但降低灵活性。2.JS模块化演进从`<script>`标签全局污染到模块化解决方案:-IIFE:立即执行函数隔离作用域(`(function(){})()`)-CommonJS:同步加载(Node.js的`require/module.exports`)-AMD:异步加载(RequireJS的`define/require`)-ESModules:标准化静态导入导出(`import/export`),支持静态分析及TreeShaking演进核心是解决依赖管理、作用域隔离和加载效率问题。ESModules通过浏览器原生支持成为未来标准。3.内存泄漏成因与检测常见泄漏场景:-意外全局变量(未声明变量赋值)-未清除的定时器(`setInterval`)-DOM引用未释放(移除元素后保留引用)-闭包持有外部大对象检测方法:-ChromeDevToolsMemory面板记录堆快照-PerformanceMonitor监控JS堆大小-使用`weakMap`避免强引用预防策略:及时解绑事件、清除定时器、避免循环引用、按需解除引用。4.异步编程范式演进-回调函数:嵌套导致"回调地狱",错误处理困难(`fs.readFile(path,(err,data)=>{})`)-Promise:链式调用(`.then().catch()`)解决回调嵌套,但冗余代码仍存-Generator:通过`yield`暂停执行,需外部迭代器控制(复杂度高)-Async/Await:以同步语法写异步代码(`asyncfunction(){awaitfetch();}`),错误可被`try/catch`捕获演进核心是提升可读性和可维护性。Async/Await基于Promise,是当前最优方案,结合`Promise.all`可高效处理并发。---答案与解析一、单项选择题1.C:`'5'`(字符串加法优先)2.D:`Hello,${name}`(模板字符串语法)3.A:`null`(`typeofnull`返回"object"是历史遗留错误)4.B:`["b"]`(`splice(1,1)`删除索引1的元素)5.C:`NaN`(字符串"a"转为NaN)6.A:`true`(浅拷贝引用相同对象)7.D:`30`(箭头函数继承外层`this`)8.B:`[objectObject]`(默认`toString()`转换)9.C:`2`(`Promise.resolve()`创建已解决的Promise)10.A:`0`(`Symbol`值是唯一标识符)二、填空题1.原型链(对象继承的核心机制)2.`addEventListener`(标准事件注册方法)3.`Promise.resolve()`(快速创建已解决的Promise)4.块级作用域(`let/const`的特性)5.`JSON.stringify()`(对象转JSON字符串)6.`event.stopPropagation()`(阻止事件冒泡)7.`Map`(键可为任意类型的集合)8.尾调用优化(ES6的递归性能优化)9.`Proxy`(元编程拦截对象操作)10.`Symbol`(创建唯一值的基本类型)三、判断题1.×:JS单线程但异步非阻塞2.√:闭包可访问外层作用域3.×:`let`存在暂时性死区4.√:原型链终点是`null`5.×:`'1'+2='12'`6.√:严格模式限制7.×:`this`由调用方式决定8.√:事件循环机制9.×:`async`函数返回Promise10.√:`WeakMap`键为弱引用四、简答题1.闭包实现私有计数器闭包通过封装外部变量实现状态私有化。示例中`createCounter`返回的函数持有对`count`的引用,形成独立作用域。每次调用`counter()`时,修改的`count`是闭包内私有变量,外部无法直接访问。该模式适用于需要持久化状态的场景(如缓存、节流函数),但需警惕内存泄漏风险,尤其当闭包引用大对象时。2.事件循环中的微任务优先级微任务(如`Promise.then`)在调用栈清空后优先执行,而宏任务(如`setTimeout`)需等待微任务队列清空。例如:```javascriptsetTimeout(()=>console.log('macro'),0);Promise.resolve().then(()=>console.log('micro'));//输出顺序:micro→macro```此设计确保异步操作的时效性,但需注意微任务递归添加可能导致主线程阻塞。3.原型链继承的缺陷与改进经典原型链继承的主要缺陷是:-子类实例共享父类引用属性(如数组)-无法向父类构造函数传参改进方案:-组合继承(构造函数窃取+原型链):```javascriptfunctionChild(){Parent.call(this);/实例属性/}Ctotype=Object.create(Ptotype);```-ES6的`classextends`语法(本质是语法糖)4.Promise.allSettled的应用场景`Promise.allSettled`在所有Promise完成后返回结果数组(含状态和值),与`all`的区别在于不因单个失败而中断。适用场景:-批量独立请求(如多接口数据采集)-需统计所有异步操作结果的场景(无论成功失败)示例:```javascriptPromise.allSettled([fetch(url1),fetch(url2)]).then(results=>results.filter(r=>r.status==='fulfilled'))```五、讨论题1.箭头函数的`this`绑定实践箭头函数`this`的静态绑定特性在React类组件中易引发问题。例如:```jsxclassButtonextendsReact.Component{handleClick=()=>{console.log(this);}//正确绑定组件实例render(){return<buttononClick={this.handleClick}/>;}}```若使用传统函数:```jsxonClick={this.handleClick.bind(this)}//需手动绑定```箭头函数在类属性中自动绑定实例`this`,避免渲染时重复绑定。但在原型方法或需要动态`this`的场景(如事件委托)不适用。2.ESModules的静态解析优势ESModules(ESM)的`import/export`在编译阶段解析依赖,支持:-TreeShaking:打包工具(如Webpack)静态分析未使用导出,减少打包体积-循环引用安全:模块导出为绑定引用,循环依赖时不会中断-异步加载:`import()`动态导入返回Promise,实现代码分割对比CommonJS的运行时加载,ESM更利于性能优化和静态检查,是现代前端构建的基石。3.WeakMap解决内存泄漏`WeakMap`以对象为键且不计入引用计数,键对象被回收时值自动释放。典型应用:-存储私有数据(避免外部访问):```javascriptconstprivateData=newWeakMap();classPerson{constructor(name){privateData.set(this,{name});}getName(){returnprivateData.get(this).name;}}```-缓存计算结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年西语初级测试题及答案
- 2026年酒店系统测试题及答案
- 2026年侯马教师能力测试题及答案
- 2025-2026学年粘贴手工教学设计
- 八年级主题班会教学设计:诚信在我身边
- 石英玻璃熔制工测试验证能力考核试卷含答案
- 铸造造型(芯)工岗前岗位晋升考核试卷含答案
- 雷达调试工道德水平考核试卷含答案
- 第6课 现代科技进步与人类社会发展说课教学设计2023-2024学年高中历史统编版(2019)选择性必修二
- UEA补偿收缩混凝土防水施工质量保证措施
- AI赋能绩效管理:从传统考核到智能驱动的全流程升级
- 2025年湖南省高中学业水平合格性考试物理卷试题(含答案)
- 多棱镜下的区域认知:七年级下册“东南亚”地理探究
- 物业防汛防台安全培训课件
- 2025年大学《土木水利与交通工程-土木水利与交通工程概论》考试参考题库及答案解析
- 儿童肾病患者的饮食管理
- 肥胖患儿的饮食与营养
- 骨质疏松联合用药方案
- 海洋机器人与人工智能(哈尔滨工程大学)知到智慧树网课答案
- 美食旅游课件
- DB61∕T 1440-2021 公路预应力混凝土连续刚构桥施工技术规范
评论
0/150
提交评论