前端面试题合集

本文详细梳理了前端面试中常见的JS面试题,包括apply, call, bind的区别,原型/原型链,闭包,事件循环,reflow与repaint等。同时深入探讨了Vue组件通信、Vue2与Vue3的区别,以及setup函数和ref、reactive的使用。通过本文,可提升对前端核心技术的理解。" 129123159,7385820,解决Vue-pdf CDN跨域及打包报错问题,"['vue.js', '前端框架', 'PDF处理', 'webpack配置']
摘要由CSDN通过智能技术生成

1、js

1,apply,call,bind三者的使用与区别:

改变函数运行时的上下文
apply使用数组传递参数,call是按顺序传递参数
bind返回的是一个函数

2、什么是原型/原型链?

原型的本质就是一个对象。
当我们在创建一个构造函数之后,这个函数会默认带上一个prototype属性,而这个属性的值就指向这个函数的原型对象。
当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到
最顶层为止(最顶层就是Object.prototype的原型,值为null)。    
所以通过原型一层层相互关联的链状结构就称为原型链。

3、什么是闭包?

闭包就是能够读取其他函数内部变量的函数。
在本质上,闭包就是将函数内部和外部连接起来的一座桥梁。
闭包在之前的项目中,最长使用的场景有:
1.Ajax请求成功的回调,在闭包中对上级函数作用域中请求到的数据的访问。2.事件绑定的回调
数据溢出,导致内存泄露(解决:将不用的闭包引用设置为null )

4、js事件循环?

事件循环又叫做消息循环,是浏览器渲染主线程的工作方式。
在Chrome 的源码中,它开启一个不会结束的 for 循环,每次循环从消息队列中取出第一个任务执行,而其他线程只需要在合适的时候将任务加入
到队列未尾即可。
过去把消息队列简单分为宏队列和微队列,这种说法目前已无法满足复杂的浏览器环境,取而代之的是一种更加灵活多变的处理方式。
根据 W3C官方的解释,每个任务有不同的类型,同类型的任务必须在同一个队列、不同的任务可以属于不同的队列。不同任务队列有不同的优先级,
在一次事件循环中,由浏览器自行决定取哪一个队列的任务。但浏览器必须有一个微队列,微队列的任务一定具有最高的优先级,必须优先调度执行。

5、什么是 reflow?

reflow的本质就是重新计算 layout 树。
当进行了会影响布局树的操作后,需要重新计算布局树,会引发layout。
为了避免连续的多次操作导致布局树反复计算,浏览器会合并这些操作,当 JS 代码全部完成后再进行统一计算。所以,改动属性造成的 reflow 是异步完成的。
也同样因为如此,当JS获取布局属性时,就可能造成无法获取到最新的布局信息。
浏览器在反复权衡下,最终决定获取属性立即 reflow。

6、什么是 repaint?

repaint的本质就是重新根据分层信息计算了绘制指令。
当改动了可见样式后,就需要重新计算,会引发 repaint。
由于元素的布局信息也属于可见样式,所以 reflow 一定会引起 repaint。

7、为什么 transform 的效率高?

因为 transform 既不会影响布局也不会影响绘制指令,它影响的只是染流程的最后一个draw阶段由于 dra
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值