1、说一说map 和 forEach 的区别?
map将会返回一个新数组,该数组的长度length与原数组的长度一样,即使数组元素是underfined或者null。foreach默认无返回值,返回的结果为underfined,通过在函数体内部使用索引改变数组元素的值
2、说一说事件循环Event loop,宏任务与微任务?
Eventloop是指js执行代码的时候,遇到同步任务,直接推到调用栈中执行,遇到异步任务,将任务挂起,直到异步任务返回结果是推到任务队列中,当调用栈同步任务全部执行完成,依次执行任务队列中的任务,反复执行以上行为。宏任务:任务队列里面的任务是宏任务,宏任务包含微任务队列。微任务:在宏任务完成了主要功能的之后,渲染引擎不着急去执行下一个宏任务,而是执行当前宏任务的微任务。宏任务包括script标签里面执行的代码、setintervel/settimeout、Ajax请求、I/O流。微任务包括promise、nexttick、object.observe等
3、说一说三栏布局的实现方案?
答:1)左右浮动,设置宽高,中间设置高,宽度自适应。2)bfc:左右浮动,中间overflow:hidden。3)flex布局,父元素设置flex,中间元素设置flex-grow:1
4、说一下浏览器垃圾回收机制?
答:垃圾回收机制根据数据存储方式分为堆垃圾回收和栈垃圾回收。栈垃圾回收非常简便,当一个函数结束之后,js引擎会向下移动ESP来销毁在栈中该函数的执行上下文,遵循先紧后出原则。堆垃圾回收,一个函数结束之后,栈空间处理完成,虽然堆空间数据并没有调用,但是占用堆内存空间,此时垃圾回收器将堆空间垃圾数据回收。
5、说一说defer和async区别?
html遇到script标签,先js加载,立即执行js代码,执行完之后dom结构更新。
加上defer和async,当HTML遇到script标签时,js加载和dom结构更新同时进行。
async在js加载之后,立即执行js代码,堵塞dom结构更新
而defer,在js加载之后,先dom结构更新在执行js代码
6、说一下浏览器如何渲染页面的?
答:先将HTML形成dom树,然后css形成css树,接着dom树和css树合并成布局树,将布局树进行分层,将每一个图层转换为图块,将图块进行光栅化转换为位图,最终渲染成页面
7、说一说new会发生什么?
new创建一个空的简单的JS对象,在对象里添加属性_proto_,将该属性链接到构造函数原型上,将创建的新对象作为执行上下文this,如果该函数没有返回对象就返回this
8、说一下token 能放在cookie中吗?
能,token是判断用户是否登录状态,token包括有uid、time、sign,token可以放在cookie,token失效是由后端决定,而不是前端,token放在cookie中只要不设置cookie的过期时间就OK的。如果token失效,后端会在接口中返回一个固定状态通知token失效,需要重新登录,再重新登录的时候,重新设置cookie中token。
9、说一下浏览器输入URL发生了什么?
1)解析URL 2)查询缓存 3)DNS解析 4)TCP三次握手 5)http请求 6)TCP四次挥手
7)HTML渲染
10、说一说盒模型?
CSS盒子模型含有border、pedding、margin、content,根据盒子的大小和计算方式分为两种盒子模型,分别是标准盒模型和怪异盒模型。标准盒模型设置width和height,实际是content的大小,盒子实际大小是pedding、margin加上设置的宽高。怪异盒模型设置的width和height,包含content、pedding和margin,设置的width和height就是实际的大小
11、说一说伪数组和数组的区别?
伪数组类型不是array而是object,可以使用length查看长度,也可以用index来获取某个元素,但是不能用数组的方法,不能修改长度,例如:参数arguments
12、说一说如何实现可过期的localstorage数据?
localstorage是永久化存储数据,直到手动删除数据,如果实现过期localstorage的话,有两种解决方式:第一种惰性删除,第二种是定时删除