当前位置:   article > 正文

2023高频前端面试题(含答案)_前端高频面试题2023

前端高频面试题2023

一、简单页面


1、CSS选择器样式优先级
2、CSS实现三列布局(左右固定宽度,中间自适应)


(1)CSS浮动
第一个float:left,第二个float:right,第三个设置margin-left和margin-right
(2)绝对定位
第一个定位到left,第二个定位到right,第三个设置margin-left和margin-right
(3)flex布局

  1. .left{
  2. width:200px;
  3. 或者
  4. flex:0 0 200px;
  5. }
  6. .right{
  7. width:200px;
  8. 或者
  9. flex:0 0 200px;
  10. }
  11. .center{
  12. flex:1;
  13. }

3、如果要做优化,CSS提高性能的方法有哪些?


内联首屏关键CSS
异步加载CSS
资源压缩
合理使用选择器
减少使用昂贵的属性
不要使用@import

二、js


1、防抖和节流,应用场景
防抖和节流都是防止某一时间频繁触发,但是原理却不一样。
防抖是将多次执行变为只执行一次,节流是将多次执行变为每隔一段时间执行。
防抖(debounce):
search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
节流(throttle):
鼠标不断点击触发,mousedown(单位时间内只触发一次)
监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断


2、什么是闭包


「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。


3、继承有哪些方法


原型链继承
借用构造函数继承(伪造对象、经典继承)
实例继承(原型式继承)
组合式继承
寄生组合继承
es6继承 extends


4、什么是深/浅拷贝,有哪些实现方式


基本数据类型:string、number、boolean、undefined、null
引用数据类型:object、array、function
JS数据类型分为基本数据类型和引用数据类型,基本数据类型保存的是值,引用类型保存的是引用地址(this指针)。浅拷贝共用一个引用地址,深拷贝会创建新的内存地址。
JSON字符串转换为JSON对象:

  1. var obj = str.parseJSON();//将JSON字符串转换为JSON对象
  2. var obj = JSON.parse(str);// 将字符串转换为JSON对象

将JSON对象转化为JSON字符串:

  1. var str = JSON.stringify(obj);
  2. var str = obj.toJSONString();

Object.assign:对象的合并 (第一级属性深拷贝,第一级以下的级别属性浅拷贝。)
ES6中的 Object.assign(),第一个参数必须是个空对象。
Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

  1. let obj1 = {
  2. a: { b: 1},
  3. c: 2
  4. }
  5. let obj2 = Object.assign({},obj1)
  6. obj2.a.b = 3; //第二层,obj1变了,是浅拷贝
  7. obj2.c = 3; //第一层,obj1不变,是深拷贝
  8. console.log(obj1);
  9. console.log(obj2);

5、数组有哪些常用方法,引出下一个问题,slice和splice区别:

1.splice改变原数组,slice不改变原数组。2.splice除了可以删除之外,还可以插入。3.splice可传入3个参数,slice接受2个参数。

6、Promise.all和Promise.race的区别,应用场景


Promise.all()可以将多个实例组装个成一个新实例,成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。

7、微任务和宏任务的区别


1.宏任务:当前调用栈中执行的代码成为宏任务。(主代码快,定时器等等)。
2.微任务: 当前(此次事件循环中)宏任务执行完,在下一个宏任务开始之前需要执行的任务,可以理解为回调事件。(promise.then,proness.nextTick等等)。
3. 宏任务中的事件放在callback queue中,由事件触发线程维护;微任务的事件放在微任务队列中,由js引擎线程维护。
微任务:process.nextTick、MutationObserver、Promise.then catch finally
宏任务:I/O、setTimeout、setInterval、setImmediate、requestAnimationFrame

1、Vue中的的通信方式有几种?隔代组件的通信你用那种方式解决?


props/$emit 适用父子组件通信
ref与parent/children适用父子组件通信
attrs/listeners,provide/inject 适用于隔代组件通信
vuex,EventBus(事件总线) 适用于父子、隔代、兄弟组件通信
slot插槽方式

2、v-show 和 v-if指令的共同点和不同点?


v-show是css切换,v-if是完整的销毁和重新创建,如果频繁切换时用v-show,运行时较少改变用v-if

3、为什么使用key?


做一个唯一标识, Diff 算法就可以正确的识别此节点。作用主要是为了高效的更新虚拟 DOM。

4、简述computed和watch的使用场景


computed:
支持缓存,数据变,直接会触发相应的操作;
监听的函数接收两个参数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/517479
推荐阅读
相关标签
  

闽ICP备14008679号