JS基础面试题及答案.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文档。上传文档
查看更多

JS基础面试题及答案

1.JS数据类型有哪些?怎么判断具体类型?

答案:

分两大类:

基本类型(7种):String、Number、Boolean、Undefined、Null、Symbol、BigInt

引用类型:Object(包括Array、Function、Date、RegExp等)

判断方法:

typeof:适合判断基本类型(除了Null,typeofnull会返回object,这是历史bug),判断引用类型时除了Function返回function,其他都返回object。

例:typeofabc→string,typeof[1,2]→object

instanceof:适合判断引用类型,原理是检查原型链上是否有该构造函数的prototype。

例:[1,2]instanceofArray→true,{}instanceofObject→true

Object.prototype.toString.call():最精准的方法,能返回[object类型]格式,支持所有类型。

例:Object.prototype.toString.call(null)→[objectNull],Object.prototype.toString.call(Symbol())→[objectSymbol]

2.变量提升和函数提升有什么区别?举个例子说明

答案:

两者都是JS预编译阶段的行为,会把声明“提前”到作用域顶部,但规则不同:

变量提升:只提升var声明的变量名,不提升赋值;let/const没有变量提升(有暂时性死区)。

函数提升:function声明的函数,会把“函数名+函数体”一起提升;函数表达式(如varfn=function(){})只提升变量名,不提升函数体。

例子:

//变量提升案例

console.log(a);//undefined(只提升声明,没提升赋值)

vara=10;

//函数提升案例

fn1();//能执行(函数体一起提升)

functionfn1(){console.log(fn1);}

fn2();//报错(只提升变量名,fn2此时是undefined)

varfn2=function(){console.log(fn2);}

3.this指向有哪些场景?分别怎么确定?

答案:

this指向不是定义时决定的,是调用时决定的,常见场景:

普通函数调用:this指向全局对象(浏览器是window,Node是global),严格模式下指向undefined。

例:functionfn(){console.log(this);}fn();//window(非严格模式)

对象方法调用:this指向调用方法的对象。

例:constobj={name:a,fn(){console.log(this.name);}};obj.fn();//a

构造函数调用(new):this指向新创建的实例对象。

例:functionPerson(name){this.name=name;}constp=newPerson(b);console.log(p.name);//b

箭头函数:没有自己的this,继承外层作用域的this(一旦确定就不会变)。

例:constobj={fn:()={console.log(this);}};obj.fn();//window(继承全局this)

call/apply/bind:直接改变this指向,第一个参数就是新的this值。

例:functionfn(){console.log(this.name);}constobj={name:c};fn.call(obj);//c

4.什么是闭包?实际开发中怎么用?有什么问题要注意?

答案:

定义:函数嵌套时,内层函数引用了外层函数的变量/参数,且内层函数被外层函数以外的地方调用,这时就形成闭包(外层函数的作用域不会被销毁)。

实际用途:

保存变量状态:比如循环中保存索引(避免经典的var循环问题)。

例:

for(vari=0;i3;i++){

(function(j){//闭包保存j的值

setTimeout(()=console.log(j),1000);

})(i);

}

//输出:0、1、2(如果不用闭包会输出3次3)

实现私有变量:比如模块封装,隐藏内部变量,只暴露方法。

例:

functioncreate

文档评论(0)

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

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

1亿VIP精品文档

相关文档