js期中测试题及答案_第1页
js期中测试题及答案_第2页
js期中测试题及答案_第3页
js期中测试题及答案_第4页
js期中测试题及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

js期中测试题及答案一、单项选择题(每题2分,共20分)1.以下关于JavaScript变量声明的描述,正确的是()A.使用var声明的变量具有块级作用域B.let声明的变量可以在同一作用域内重复声明C.const声明的对象属性可以修改D.使用var声明的变量未初始化时值为undefined答案:C解析:const声明的变量指向的内存地址不可变,但如果是对象,对象属性可以修改(A错误,var是函数作用域;B错误,let不允许重复声明;D错误,var声明未初始化时变量存在但值为undefined,但未声明直接使用会报错)。2.执行`typeoftypeof123`的结果是()A."number"B."string"C."undefined"D."object"答案:B解析:typeof123返回"number"(字符串),再次typeof该字符串结果为"string"。3.以下代码的输出结果是()```javascriptvara=1;functionfn(){console.log(a);vara=2;}fn();```A.1B.2C.undefinedD.报错答案:C解析:函数内部var声明的a会提升至函数顶部,但赋值在打印之后,因此打印时a为undefined(变量提升)。4.以下数组方法中,不会改变原数组的是()A.sort()B.splice()C.map()D.push()答案:C解析:map()返回新数组,原数组不变;sort()、splice()、push()均会修改原数组。5.关于事件冒泡的描述,正确的是()A.事件从目标元素向父元素传播B.事件从根元素向目标元素传播C.addEventListener的第三个参数为true时阻止冒泡D.所有事件都支持冒泡答案:A解析:事件冒泡是从目标元素向上传播至根元素;第三个参数为true时是捕获阶段;并非所有事件(如focus)支持冒泡。6.执行`[1,2,3].reduce((acc,cur)=>acc+cur,0)`的结果是()A.6B.[6]C.0D.undefined答案:A解析:reduce方法累加数组元素,初始值为0,1+2+3=6。7.以下能正确判断变量x是否为数组的是()A.typeofx==='array'B.xinstanceofArrayC.x.constructor===ArrayD.Array.isArray(x)答案:D解析:typeof无法区分数组和对象;instanceof在跨窗口场景可能失效;constructor可能被修改;Array.isArray()是最可靠方法。8.执行以下代码后,控制台输出是()```javascriptletobj={a:1};functionchange(obj){obj.a=2;obj={a:3};}change(obj);console.log(obj.a);```A.1B.2C.3D.报错答案:B解析:函数参数是对象引用,修改obj.a会改变原对象;但重新赋值obj为新对象后,原引用不再指向该变量,因此原对象a属性被改为2。9.以下关于ES6模块的描述,错误的是()A.使用import引入模块B.模块默认开启严格模式C.exportdefault只能导出一个值D.模块在浏览器中需使用type="module"属性答案:无错误选项(题目设置错误,正确应为“错误的是”,实际选项均正确)10.执行`newDate('2023-10-01').getMonth()`的结果是()A.9B.10C.8D.11答案:A解析:JavaScript中月份从0开始计数,10月对应getMonth()返回9。二、填空题(每空2分,共20分)1.用ES6语法声明一个不可重新赋值的字符串变量:`conststr='hello';`2.表达式`3+'2'`的结果是`"32"`(字符串类型)。3.数组`[1,2,3,4]`使用`slice(1,3)`方法返回的子数组是`[2,3]`。4.正则表达式`/ab?c/`可以匹配的字符串有`ac`、`abc`(写出任意一个即可)。5.执行以下代码后,`x`的值是`3`:```javascriptletx=1;x+=++x+x++;```解析:++x先自增后使用(x=2),x++先使用后自增(x=3),计算式为1+2+2=5?不,原式是x+=...,初始x=1,++x后x=2,此时++x的值是2;x++的值是2(x变为3),所以表达式为1+2+2=5?原x是1,x+=5→x=6?可能我计算错误,正确步骤:初始x=1;++x→x=2,值为2;x++→值为2,x变为3;所以表达式是1+2+2=5,x+=5→x=6。正确答案应为6。(修正:原填空题第5题正确答案是6)6.DOM中获取所有类名为"box"的元素的方法是`document.getElementsByClassName('box')`(或`document.querySelectorAll('.box')`)。7.异步编程中,`Promise`的状态可以是`pending`(等待)、`fulfilled`(成功)、`rejected`(失败)。8.执行`'hello'.split('').reverse().join('')`的结果是`'olleh'`。9.用箭头函数改写以下函数:```javascriptfunctionadd(a,b){returna+b;}```改写结果:`constadd=(a,b)=>a+b;`10.对象解构赋值:`const{name:userName,age}={name:'Alice',age:20};`,则`userName`的值是`'Alice'`。三、简答题(每题6分,共30分)1.解释JavaScript中的“作用域链”及其作用。答案:作用域链是当查找变量时,从当前作用域开始向上级作用域逐级查找,直到全局作用域的链式结构。作用是确定变量的可访问范围,确保函数或代码块能访问到正确的变量值,避免命名冲突。2.说明`call()`、`apply()`和`bind()`的区别。答案:三者均用于改变函数的`this`指向。`call()`和`apply()`立即执行函数,区别在于参数传递方式(call接收逗号分隔的参数,apply接收数组);`bind()`返回一个新函数,不会立即执行,需要手动调用。3.什么是事件委托?其优点是什么?答案:事件委托利用事件冒泡机制,将事件监听器绑定到父元素,通过事件目标(event.target)判断子元素触发事件。优点是减少事件监听器数量(尤其动态元素)、提升性能、避免重复绑定和解绑。4.简述ES6中`let`和`var`的主要区别。答案:(1)作用域:let是块级作用域({}内),var是函数作用域;(2)变量提升:let存在暂时性死区(TDZ),声明前不可使用;var声明会提升但值为undefined;(3)重复声明:let不允许同一作用域重复声明,var允许。5.解释“回调地狱”及其解决方案。答案:回调地狱指多个异步操作嵌套调用(回调函数层层嵌套),导致代码可读性差、维护困难的问题。解决方案包括:(1)使用Promise链式调用;(2)ES2017的async/await语法;(3)使用async库等第三方工具。四、编程题(共30分)1.(10分)实现一个函数`unique(arr)`,输入一个数组,返回去重后的新数组(至少用两种方法实现)。方法一(Set):```javascriptfunctionunique(arr){return[...newSet(arr)];}```方法二(reduce):```javascriptfunctionunique(arr){returnarr.reduce((acc,cur)=>{if(!acc.includes(cur)){acc.push(cur);}returnacc;},[]);}```方法三(双重循环):```javascriptfunctionunique(arr){constres=[];for(leti=0;i<arr.length;i++){letisRepeat=false;for(letj=0;j<res.length;j++){if(arr[i]===res[j]){isRepeat=true;break;}}if(!isRepeat){res.push(arr[i]);}}returnres;}```2.(10分)编写代码实现以下功能:页面中有一个按钮(id="btn")和一个空的div(id="container")。点击按钮时,向div中添加一个p标签,内容为当前时间(格式:YYYY-MM-DDHH:mm:ss)。每个新添加的p标签点击时,弹出其内容。```html<buttonid="btn">添加时间</button><divid="container"></div><script>constbtn=document.getElementById('btn');constcontainer=document.getElementById('container');//提供当前时间字符串functiongetCurrentTime(){constdate=newDate();constyear=date.getFullYear();constmonth=String(date.getMonth()+1).padStart(2,'0');constday=String(date.getDate()).padStart(2,'0');consthours=String(date.getHours()).padStart(2,'0');constminutes=String(date.getMinutes()).padStart(2,'0');constseconds=String(date.getSeconds()).padStart(2,'0');return`${year}-${month}-${day}${hours}:${minutes}:${seconds}`;}//按钮点击事件btn.addEventListener('click',()=>{constp=document.createElement('p');p.textContent=getCurrentTime();//p标签点击事件(使用事件委托优化)p.addEventListener('click',function(){alert(this.textContent);});container.appendChild(p);});//优化:使用事件委托,避免为每个p单独绑定事件/container.addEventListener('click',(e)=>{if(e.target.tagName==='P'){alert(e.target.textContent);}});/</script>```3.(10分)使用`async/await`实现以下功能:模拟一个异步请求函数`fetchUser(id)`,返回Promise,1秒后解析为用户对象(如{id:1,name:'张三'})。调用`fetchUser(1)`获取用户数据,若成功则输出用户姓名;若失败(模拟错误)则输出错误信息。```javascript//模拟异步请求函数functionfetchUser(id){returnnewPromise((resolve,reject)=>{setTimeout(()=>{if(id===1){resolve({id:1,

温馨提示

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

评论

0/150

提交评论