1.css中实现吸顶的属性?
position:sicky;
2.webpack在npm run build之后发生了什么?
3.vue中data为什么返回是一个对象?
如果直接返回一个对象,对象是引用类型,当我们在多个页面引用这个组件,去修改对象中的某个属性,其他地方的值也会发生变化,而return出一个方法,每次引用都会是一个新的对象,引用地址不同,就不会出现这个问题
4.请输出一下js运行的结果 并说明原因。
1.<script>console.log(a)</script>
5.ES5中怎么声明const?
6.watch和computed的区别?
watch是只要数据变化 就会触发相应的操作,不支持缓存,支持异步
computed支持缓存,当依赖的数据发生变化时触发相应的操作 不支持异步,
当多个数据依赖一个数据时用watch 而一个数据依赖多个数据时用computed
7.浏览器缓存有哪些?
浏览器缓存(HTTP缓存):1.强缓存:强缓存是利用http头部Expires和cache-control来控制的,当发起请求时,浏览器会检测expires和cache-control来判断资源是否过期,如果没有过期会直接使用缓存,不再向浏览器发起请求,如果过期了 会向浏览器发起协商缓存。2.协商缓存:第一次发起请求时,服务器会在response header中添加一个 Last-Modified字段 他的含义就是该资源在服务器中最后一次修改的时间,下一次发送请求时,浏览器会在request-header中添加一个Last-Modified-Since字段 这个字段的值就是服务器返回的Last-Modified的值,服务器接收到请求时 会用这个值和服务器最后对资源进行修改的值做对比,如果相同,就响应浏览器304,去读取缓存,如果不同就重新读取资源返回200
8.深拷贝和浅拷贝的方法有哪些?
深拷贝的实现方式:
1.JSON.parse() /JSON.stringfy()用JSON.stringfy()把对象转化为JSON字符串,再用JSON.parse把字符串转换为对象 就会生成一个新的对象,而且对象会开辟一个新的栈,就会实现深拷贝
2.函数库loadsh()
3.封装一个递归方法
9.react的setState是同步还是异步?
setState只在合成事件和钩子函数中是“异步”的,在原生事件和setTimeout 中都是同步的。
setState 的“异步”并不是说内部由异步代码实现,其实本身执行的过程和代码都是同步的,只是合成事件和钩子函数的调用顺序在更新之前,导致在合成事件和钩子函数中没法立马拿到更新后的值,形成了所谓的“异步”,当然可以通过第二个参数 setState(partialState, callback) 中的callback拿到更新后的结果。
setState 的批量更新优化也是建立在“异步”(合成事件、钩子函数)之上的,在原生事件和setTimeout 中不会批量更新,在“异步”中如果对同一个值进行多次setState,setState的批量更新策略会对其进行覆盖,取最后一次的执行,如果是同时setState多个不同的值,在更新时会对其进行合并批量更新。
10.forEach和map有什么区别?
forEach会返回undefined 所以会直接改变原数组 而map会创建一个新数组然后返回
11.v-model的实现原理?
实现数据的双向绑定 总共分为三步:1.实现一个Observer,Observer是一个数据监听器,其核心原理时Object.defineProperty(),用来劫持并监听所有的属性,如果有变动的,就通知订阅者。2.实现一个订阅者Watcher,每一个watcher都绑定一个更新函数,watcher可以收到属性的变化,并执行相应的函数 更新到视图。3.实现一个解析器Complier,可以扫描和解析v-model和v-on指令,如果节点存在v-model和v-on指令,则解析器complier初始化这类节点的模板数据,使之可以显示再视图上,然后初始化相应的订阅者