前端面试题(一)

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初始化这类节点的模板数据,使之可以显示再视图上,然后初始化相应的订阅者

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容