- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
JavaScript实战面试题及答案
一、基础语法篇(考察实际编码细节)
题目:var、let、const声明变量的区别?实际开发中优先用哪个?
答案:
作用域:var是函数级作用域,存在变量提升;let/const是块级作用域({}内生效),无变量提升且有暂时性死区。
重复声明:var允许重复声明,let/const不允许。
赋值:const声明时必须赋值,且后续不能修改引用(基本类型值不可改,对象/数组可改内部属性)。
开发优先:优先用const(确保值不被意外修改),需要重新赋值时用let,尽量不用var(避免作用域混乱和变量污染)。
题目:判断数据类型有哪些方法?各自的优缺点?
答案:
typeof:优点是简单,能区分基本类型(除null外,typeofnull会返回object);缺点是无法区分引用类型(数组、对象、null都返回object)。
instanceof:优点是能区分引用类型(如arrinstanceofArray可判断数组);缺点是无法判断基本类型,且原型链修改后可能失效(如Array.prototype.proto=Object.prototype,arrinstanceofObject也会为true)。
Object.prototype.toString.call():优点是最准确,能区分所有类型(如Object.prototype.toString.call(null)返回[objectNull],call(arr)返回[objectArray]);缺点是写法稍繁琐,需提取结果中的类型名。
二、异步编程篇(考察实际业务处理能力)
题目:Promise有哪三种状态?如何解决Promise回调地狱?
答案:
三种状态:pending(等待中)、fulfilled(成功)、rejected(失败);状态一旦改变(pending→fulfilled或pending→rejected),就不可再变。
解决回调地狱:
用Promise链式调用(.then()方法返回新Promise,可连续调用),避免嵌套。
结合async/await(语法糖,将异步代码同步化编写),代码更直观。例如:
asyncfunctionfetchData(){
try{
constres1=awaitfetch(/api/1);//等待第一个请求完成
constdata1=awaitres1.json();
constres2=awaitfetch(`/api/2?data=${data1.id}`);//依赖第一个请求结果
constdata2=awaitres2.json();
returndata2;
}catch(err){
console.error(请求失败:,err);//统一捕获错误
}
}
题目:宏任务和微任务的区别?举几个常见的宏/微任务例子。
答案:
区别:JS执行时先执行同步代码,再清空微任务队列,最后执行一个宏任务,循环此过程(事件循环机制)。
微任务(优先级高):Promise.then/catch/finally、async/await中的异步代码、queueMicrotask()。
宏任务(优先级低):setTimeout、setInterval、DOM事件(如click)、AJAX请求、script脚本执行。
例子:以下代码输出顺序是?
console.log(1);
setTimeout(()=console.log(2),0);
Promise.resolve().then(()=console.log(3));
console.log(4);
//输出:1→4→3→2(同步代码先执行,再微任务,最后宏任务)
三、原型与继承篇(考察JS核心机制理解)
题目:什么是原型链?实际开发中如何实现继承?
答案:
原型链:每个对象都有proto属性(指向其原型对象),原型对象也有自己的proto,直到指向Object.prototype(proto为null),这条链就是原型链。当访问对象属性时,会先在自身查找,找不到则沿原型链向上查找。
常用继承方式(ES6+):
//父类
classParent{
constructor(name){
this.name=name;
}
sayName(){
console.log(this.name);
}
}
//子类继承父类
clas
文档评论(0)