JavaScript 高频面试题及详细解析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

JavaScript高频面试题及详细解析

一、基础概念题(5题)

1.说说var、let、const的区别,为什么现在推荐用let/const?

答案:

作用域:var是函数作用域/全局作用域,let/const是块级作用域({}内有效);

提升行为:var会变量提升且初始化为undefined,let/const存在暂时性死区(TDZ),声明前使用报错;

重复声明:var允许重复声明,let/const不允许;

常量特性:const声明的变量必须初始化,且不能重新赋值(但引用类型的属性可修改)。

推荐let/const的原因:块级作用域更符合逻辑,避免变量泄露(如for循环),暂时性死区减少意外错误,const强制只读特性提升代码可维护性。

2.什么是原型链?它的作用是什么?

答案:

每个JavaScript对象都有__proto__属性(隐式原型),指向其构造函数的prototype(显式原型);当访问对象的属性/方法时,若自身没有,会通过__proto__向上查找,直到找到Object.prototype(原型链顶端),这个查找链条就是原型链。

作用:实现继承和属性共享,比如Array.prototype上的push、forEach方法,所有数组实例都能通过原型链访问,无需每个实例单独定义,节省内存。

3.解释一下JavaScript中的“假值”(falsyvalue)有哪些?

答案:

共6个假值,在布尔判断中会被转为false:

undefined、null

0、-0、NaN

(空字符串)

false

注意:空数组([])、空对象({})、字符串0、数字1都是真值,比如if([])会执行代码块。

4.什么是事件冒泡和事件捕获?如何阻止?

答案:

事件冒泡:事件从触发元素(目标元素)向上传播到父级、祖父级元素(由内向外);

事件捕获:事件从最顶层父元素向下传播到目标元素(由外向内);

阻止方法:

阻止冒泡:event.stopPropagation()(IE低版本用event.cancelBubble=true);

阻止默认行为(如表单提交、a标签跳转):event.preventDefault()(IE低版本用event.returnValue=false);

注意:returnfalse在jQuery中会同时阻止冒泡和默认行为,但原生JS中仅阻止默认行为。

5.说说typeof和instanceof的区别,各自的局限性?

答案:

typeof:检测基本数据类型(返回string/number/boolean/undefined/symbol/bigint/function),但null会返回object,引用类型(数组、对象、正则)均返回object;

instanceof:检测引用类型的原型链是否包含目标构造函数的prototype(如[]instanceofArray返回true),但基本数据类型无法用(除非通过包装对象,如newNumber(1)instanceofNumber),且跨iframe时可能失效(原型链断裂)。

局限性示例:

typeofnull===object(历史bug,无法修复);

[]instanceofObject===true(数组也是对象,无法精准区分数组和普通对象);

解决精准判断:数组用Array.isArray(),普通对象用Object.prototype.toString.call(obj)===[objectObject]。

二、进阶原理题(5题)

1.什么是闭包?闭包的用途和潜在问题?

答案:

闭包是指函数能访问其声明时所在的词法作用域,即使函数在作用域外部执行。本质是词法作用域+函数一等公民特性的结合。

常见用途:

封装私有变量(如模块模式,避免全局污染);

延长变量生命周期(如防抖节流函数中保存计时器ID);

柯里化函数(如add(1)(2)(3)=6)。

潜在问题:

内存泄漏:闭包引用的变量不会被垃圾回收机制回收,若长期持有大量数据,可能导致内存占用过高;

解决:不再使用时手动解除引用(如fn=null),避免不必要的闭包嵌套。

2.解释JavaScript的异步编程模型,说说回调地狱及其解决方案?

答案:

JavaScript是单线程语言,异步编程通过“事件循环(EventLoop)”实现:同步代码优先执行,异步任务(如定时器、AJAX、DOM事件)放入任务队列,同步代码执行完后,循环读取任务队列并执行。

回调地狱:多个异步操作嵌套(如AJAX回调里再写

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档