1. 深度克隆对象的几种简单的方法:答 ,JSON互译 assign(错误,之前使用assign写了很多代码 实现的深克隆,时间久了忘了,然后答上去给自己挖坑)
2.JSON互译的方法有什么缺陷,答:symbol对象与promise对象无法克隆 (面试官指出--还有引用循环对象无法克隆);
3.怎么判断一个对象是引用循环对象 //(脑子懵了,连判断引用地址都忘了,面试官提示了下,然后写了一段简单递归判断);
答:
function fn(obj){ if(typeof obj !== 'object')return; for(let k in obj){ if(obj[k] === obj){ //引用循环 }else{ fn(obj[k]) } } }
我这里问了下面试官是否需要判断跨层级引用循环,然后面试官说你说说思路(答 - 》深度优选遍历- 但是没想出来怎么保存上级状态
4.浏览器的缓存协议有哪些(答:协商缓存和最终缓存)
5.缓存区别是什么(协商缓存用固定的时间来判断缓存是否更新,最终缓存用缓存时间|Etag(资源字符码)来判断;
6.new完之后执行了哪些操作
答:在构造函数内创建了this对象,然后将this对象返回出去(没答全-》后来追问下再答,把他的__proto__.constructor指向这个构造函数)
7.追问怎么在构造函数内判断这是使用new操作符来构建的
答:又支支吾吾想半天(答是用 instanceof 来判断
8.问了下闭包是如何产生的(当内部作用域的变量被保存到了外部作用域时就产生了闭包)
9.问了下闭包的使用场景和我的使用案例
(代码模块化 ,保存变量, 答完过一阵才想到还经常用到 funtion (a){ return funtion (option) { //操作a } }这种写法;
答:在工作中碰到过一次父组件向子组件传值时,需要传递的对象是一个promise对象,由于父组件在传值时有深度克隆的过程,所以使用function将promise对象保存
出去,在子组件中接收;
10.问闭包产生的副作用- 回答内存泄漏
11.追问,js底层怎么处理这种内存泄漏 (答不知道。。。
最后面试官问我有什么想问他的,我说觉得面试结果咋样
面试官说回答得不够干脆,准备的不够充分(确实。。。面试的时候就很紧张,每次都在努力的想面试官想考的点,结果每次都没get到
--------------------
觉得应该挂了 = _ =!!!