前端面试题系列-2
文章目录
一、说一说cookie sessionStorage localStorage 区别?
cookie、sessionStorage、localStorage
都是浏览器本地存储。- cookie是由服务器端写入的,sessionStorage、localStorage是由前端写入的。
- cookie的生命周期是服务器端在写入的时候就设置好的,
sessionStorage
是页面关闭的时候就自动清除,localStorage
是写入就一直存在,除非手动清除。 cookie
大小大概4kb,localStorage、sessionStorage
大小大概5M。- 都遵循同源原则,在前端给后端发送请求的时候会自动携带
cookie
的数据,但是localStorage和sessionStorage
不会。 cookie
一般用于存储登录验证信息或者token,localStorage
常用于存储不易变动的数据,sessionStorage
可以用来检测用户是否刷新进入页面。
二、说一说JS数据类型有哪些,区别是什么?
关键点:Number、string、boolean、bigint、symbol、null、undefined、object、8种
- 主要分为简单(基本)数据类型和复杂(引用)数据类型,复杂数据类型通常用
object
代表,普通对象、数组、正则、日期、Math数学函数都属于object
。 - 两种数据类型存储方式不同。基本数据类型是直接存储在栈中的简单数据段,占据空间小,属于频繁使用的数据。引用数据类型存储在堆内存中,占据空间大,会在栈中存储指针。
symbol
的特点就是没有重复的数据。BigInt
也是ES6新出的一种数据类型,这种数据类型的特点就是数据涵盖的范围大,能够解决超出普通数据类型范围报错的问题。不能和Number
混合操作。
三、说一说你对闭包的理解?
- 闭包形成的原理:作用域链,当前作用域可以访问上级作用域中的变量。
- 闭包解决的问题:能够让函数作用域中的变量在函数执行结束之后不被销毁,同时实现在函数外部可以访问函数内部的变量。
- 带来的问题:内存泄露,会导致内存溢出。
- 闭包的应用:防抖节流。
四、说一说promise是什么与使用方法?
- 概念:异步编程的一种解决方案,解决了地狱回调的问题 。
- 使用方法:
new Promise((resolve, reject)=>{resolve();reject()})
,resolve()
接then
查看成功消息,reject()
接catch
查看错误消息。
五、说一说跨域是什么?如何解决跨域问题?
- 跨域:当前页面中的某个接口请求的地址和当前页面的地址,如果域名、协议、端口其中有一项不同,则称该接口跨域了。
- 跨域限制的原因:保证网页的安全。
- 常用解决方案:nginx反向代理,JSONP利用script标签可以跨域请求资源。
六、说一说JavaScript有几种方法判断变量的类型?
typeof
;判断基本数据类型,对于引用数据类型除了function返回‘function’,其余全部返回‘object’。instanceof
:主要区分引用数据类型,不适用于简单数据类型的检测,undefined、null、symbol检测不出来。constructor
:用于检测引用数据类型,根据获取实例的构造函数判断和某个类是否相同。object.prototype.tostring.call()
:适用于所有类型的判断检测Object.prototype.toString
表示一个返回对象类型的字符串,call()
方法可以改变this
的指向,那么把Object.prototype.toString()
方法指向不同的数据类型上面,返回不同的结果
七、说一说JS实现异步的方法
回调函数、事件监听、setTimeout、Promise、生成器Generators/yield、async/awt
异步执行就是非阻塞模式执行,每一个任务有一个或多个回调函数callback,前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
当Js执行时,进行如下流程
1.首先将执行栈中代码同步执行,将这些代码中异步任务加入后台线程中
2.执行栈中的同步代码执行完毕后,执行栈清空,并开始扫描微队列
3.取出微队列队首任务,放入执行栈中执行,此时微队列是进行了出队操作
4.当执行栈执行完成后,继续出队微队列任务并执行,直到微队列任务全部执行完毕
5.最后一个微队列任务出队并进入执行栈后微队列中任务为空,当执行栈任务完成后,开始扫面微队列为空,继续扫描宏队列任务,宏队列出队,放入执行栈中执行,执行完毕后继续扫描微队列为空则扫描宏队列,出队执行。