前端面试题系列-2

前端面试题系列-2



一、说一说cookie sessionStorage localStorage 区别?

  1. cookie、sessionStorage、localStorage都是浏览器本地存储。
  2. cookie是由服务器端写入的,sessionStorage、localStorage是由前端写入的。
  3. cookie的生命周期是服务器端在写入的时候就设置好的,sessionStorage是页面关闭的时候就自动清除,localStorage是写入就一直存在,除非手动清除。
  4. cookie大小大概4kb,localStorage、sessionStorage大小大概5M。
  5. 都遵循同源原则,在前端给后端发送请求的时候会自动携带cookie的数据,但是localStorage和sessionStorage不会。
  6. cookie一般用于存储登录验证信息或者token,localStorage常用于存储不易变动的数据,sessionStorage可以用来检测用户是否刷新进入页面。

二、说一说JS数据类型有哪些,区别是什么?

关键点:Number、string、boolean、bigint、symbol、null、undefined、object、8种

  • 主要分为简单(基本)数据类型复杂(引用)数据类型,复杂数据类型通常用object代表,普通对象、数组、正则、日期、Math数学函数都属于object
  • 两种数据类型存储方式不同。基本数据类型是直接存储在栈中的简单数据段,占据空间小,属于频繁使用的数据。引用数据类型存储在堆内存中,占据空间大,会在栈中存储指针。
  • symbol的特点就是没有重复的数据。
  • BigInt也是ES6新出的一种数据类型,这种数据类型的特点就是数据涵盖的范围大,能够解决超出普通数据类型范围报错的问题。不能和Number混合操作。

三、说一说你对闭包的理解?

  1. 闭包形成的原理:作用域链,当前作用域可以访问上级作用域中的变量。
  2. 闭包解决的问题:能够让函数作用域中的变量在函数执行结束之后不被销毁,同时实现在函数外部可以访问函数内部的变量。
  3. 带来的问题:内存泄露,会导致内存溢出。
  4. 闭包的应用:防抖节流。

四、说一说promise是什么与使用方法?

  1. 概念:异步编程的一种解决方案,解决了地狱回调的问题 。
  2. 使用方法new Promise((resolve, reject)=>{resolve();reject()}),resolve()then查看成功消息,reject()catch查看错误消息。

五、说一说跨域是什么?如何解决跨域问题?

  • 跨域:当前页面中的某个接口请求的地址和当前页面的地址,如果域名、协议、端口其中有一项不同,则称该接口跨域了。
  • 跨域限制的原因:保证网页的安全。
  • 常用解决方案:nginx反向代理,JSONP利用script标签可以跨域请求资源。

六、说一说JavaScript有几种方法判断变量的类型?

  1. typeof;判断基本数据类型,对于引用数据类型除了function返回‘function’,其余全部返回‘object’。
  2. instanceof:主要区分引用数据类型,不适用于简单数据类型的检测,undefined、null、symbol检测不出来。
  3. constructor:用于检测引用数据类型,根据获取实例的构造函数判断和某个类是否相同。
  4. object.prototype.tostring.call():适用于所有类型的判断检测Object.prototype.toString 表示一个返回对象类型的字符串,call()方法可以改变this的指向,那么把Object.prototype.toString()方法指向不同的数据类型上面,返回不同的结果

七、说一说JS实现异步的方法

js异步机制的实现

回调函数、事件监听、setTimeout、Promise、生成器Generators/yield、async/awt

异步执行就是非阻塞模式执行,每一个任务有一个或多个回调函数callback,前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

当Js执行时,进行如下流程
1.首先将执行栈中代码同步执行,将这些代码中异步任务加入后台线程中
2.执行栈中的同步代码执行完毕后,执行栈清空,并开始扫描微队列
3.取出微队列队首任务,放入执行栈中执行,此时微队列是进行了出队操作
4.当执行栈执行完成后,继续出队微队列任务并执行,直到微队列任务全部执行完毕
5.最后一个微队列任务出队并进入执行栈后微队列中任务为空,当执行栈任务完成后,开始扫面微队列为空,继续扫描宏队列任务,宏队列出队,放入执行栈中执行,执行完毕后继续扫描微队列为空则扫描宏队列,出队执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值