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实战面试题及详细解析

一、基础语法与变量机制(共3题)

1.题目:请解释var、let、const的区别,并用代码举例说明变量提升和块级作用域的表现

答案:

三者核心区别集中在作用域、变量提升、重复声明和修改权限上:

var:函数级作用域,存在变量提升(提升为undefined),可重复声明和修改;

let:块级作用域({}包裹区域),无变量提升(存在暂时性死区),不可重复声明,可修改;

const:块级作用域,无变量提升(暂时性死区),不可重复声明,不可修改引用(基本类型值不可改,引用类型属性可改)。

代码示例:

//变量提升对比

console.log(a);//undefined(var提升)

vara=10;

console.log(b);//报错(Cannotaccessbbeforeinitialization,let无提升)

letb=20;

//块级作用域对比

if(true){

varc=30;

letd=40;

}

console.log(c);//30(var无块级作用域)

console.log(d);//报错(disnotdefined,let块级作用域)

//const特性

conste=50;

e=60;//报错(Assignmenttoconstantvariable)

constf={name:js};

f.name=javascript;//正常运行(仅禁止修改引用,不限制属性)

2.题目:什么是闭包?闭包的实际应用场景有哪些?请写一个简单闭包示例

答案:

闭包定义:函数嵌套时,内部函数引用外部函数的变量/参数,且内部函数被外部访问,导致外部函数的执行上下文不会被垃圾回收,这种“函数+词法环境”的组合就是闭包。

核心作用:保存变量状态(延长变量生命周期)、实现私有变量。

实际场景:防抖节流、模块模式、函数柯里化。

示例(模块模式实现私有变量):

functioncreateCounter(){

letcount=0;//私有变量,外部无法直接访问

return{

increment:()=count++,

getCount:()=count

};

}

constcounter=createCounter();

counter.increment();

console.log(counter.getCount());//1

console.log(counter.count);//undefined(无法直接访问私有变量)

3.题目:请分析以下代码的输出结果,并解释原因

console.log(typeofnull);

console.log(typeofundefined);

console.log(typeof[]);

console.log(typeof{});

console.log(typeoffunction(){});

console.log(10==10);

console.log(10===10);

答案:

输出结果依次为:object、undefined、object、object、function、true、false。

原因解析:

typeofnull输出object是JS历史遗留Bug(最初设计时null被视为空对象指针);

typeofundefined是唯一正确识别undefined的方式;

数组([])和对象({})的底层类型都是object,typeof无法区分;

函数是特殊的对象类型,typeof对函数返回function(特殊处理);

==是松散相等,会进行类型转换(字符串转数字后比较),所以10==10为true;

===是严格相等,不进行类型转换,比较值和类型是否都相同,所以10===10为false。

二、异步编程(共3题)

1.题目:请分析以下异步代码的输出顺序,并解释EventLoop机制

console.log(同步1);

setTimeout(()={

console.log(定时器1);

},0);

Promise.resolve().then(()={

console.log(微任务1);

}).then(()={

console.log(微任务2);

});

console.log(同步2);

答案:

输出顺序:同步1→同步2→微任务1→微任务2→定时器1。

Event

文档评论(0)

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

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

1亿VIP精品文档

相关文档