- 博客(16)
- 收藏
- 关注
原创 资源提示关键词:前端高频面试专辑(浏览器篇)
在上一篇文章中,我们介绍了浏览器的渲染流程,这篇文章中,我们将重点聚焦在渲染阻塞上,来详细看一下渲染阻塞以及一些常见的解决方法。本文主要包含以下内容:渲染阻塞回顾defer和asyncpreloadprefetchprerenderpreconnect。
2025-03-30 17:50:09
921
原创 Class和构造器的区别--------附带面试真题
从名字上面我们也可以看出,这个方法是核对构造方法的调用形式的,接收两个参数,一个是实例对象,另一个是构造函数,通过。可以看出,该方法就是设置对象方法的属性描述符,包含是否可遍历呀,是否可写呀等信息,设置完成后将方法挂在。console.log(`这是一台${this.name}电脑`);console.log(`这是一台${this.name}电脑`);console.log("电脑由显示器,主机,键鼠组成");console.log("电脑由显示器,主机,键鼠组成");方法添加了重复的形式参数。
2025-03-10 10:22:29
879
原创 前端递归-----一篇文章带你入门并搞懂递归
这种数据结构实现的,每当一个函数调用,栈就会加一层,每当函数返回,栈就会减一层。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出。递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以用循环的方式来实现。递归调用是一种特殊的调用形式,指的是方法自己调用自己的形式。使用递归时需要注意防止栈溢出。每次调用的时候都需要根据需求改变传递的参数内容。下面是递归的一个示例,求某个数的阶乘。当然这一般是我们需要避免的状况。然后再调用自己,导致无限递归(:使用递归来计算斐波那契数列。
2025-03-10 10:21:44
620
原创 闭包-------前端高频面试题
闭包,是JavaScript中一个非常重要的知识点,也是我们前端面试中较高几率被问到的知识点之一。打开《JavaScript高级程序设计》和《JavaScript权威指南》,会发现里面针对闭包的解释各执一词,在网络上搜索关于闭包的内容,也发现众说纷纭,这就导致了这个知识点本身显得有点神秘,甚至还有一点玄幻。那么这个知识点真的有那么深奥么?非也!其实要理解JavaScript中的闭包,非常容易,但是在此之前你需要先知道以下两个知识点:JavaScript中的作用域和作用域链。
2025-03-06 18:40:24
603
原创 垃圾回收与内存泄漏-------一篇文章搞懂前端高频面试题
程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于持续运行的服务进程(daemon),必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。也就是说,不再用到的内存,如果没有及时释放,就叫做内存泄漏(JavaScript。
2025-03-05 18:05:41
855
原创 一篇文章搞懂前端高频面试题-----this指向
this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。关于this的指向,有一种广为流传的说法就是“谁调用它,this就指向谁”。这样的说法没有太大的问题,但是并不是太全面。总结起来,this的指向规律有如下几条:在函数体中,非显式或隐式地简单调用函数时,在严格模式下,函数内的this。
2025-03-05 18:05:06
905
原创 Vue运行机制-------面试重点
Vue3 是一个声明式的框架。总结:当模板编译成的渲染函数执行时,渲染函数内部用到的响应式数据会和渲染函数本身构成依赖关系,之后只要响应式数据发生变化,渲染函数就会重新执行。会将其编译为渲染函数,渲染函数执行后能够确定响应式数据和渲染函数之间的依赖关系,之后响应式数据一变化,渲染函数就会重新执行。用户书写模板----> 编译器 ----> 渲染函数 ----> 渲染函数执行得到上面的 JS 对象(虚拟DOM)执行渲染函数得到的就是虚拟 DOM,也就是像这样的 JS 对象,里面包含着 UI 的描述信息。
2025-02-24 18:36:53
729
原创 Vue 的 nextTick 是如何实现的?
console.log('通过DOM拿textContent数据:', document.getElementById('counter').textContent)console.log('通过DOM拿textContent数据:', document.getElementById('counter').textContent)console.log('通过DOM拿textContent数据:', document.getElementById('counter').textContent)
2025-02-24 18:36:14
513
原创 Vue2响应式回顾
为了实现这一点,Observer 把对象的每个属性通过 Object.defineProperty 转换为带有 getter 和 setter 的属性,这样一来,当访问或设置属性时,Vue 就有机会做一些别的事情。总之,Observer 的目标,就是要让一个对象,它属性的读取、赋值,内部数组的变化都要能够被 Vue 感知到。劫持数据对象,是 Observer 的工作,它的目标很简单,就是把一个普通的对象转换为响应式的对象。如果有,那么说一下具体有哪些改变?
2025-02-24 18:35:21
597
原创 一篇文章彻底搞懂Vue3整体的变化-----面试重点
Vue2 没有把组件实例和 Vue 应用两个概念区分开,在 Vue2 中,通过 new Vue 创建的对象,既是一个 Vue 应用,同时又是一个特殊的 Vue 组件。Vue3 中,把两个概念区别开来,通过 createApp 创建的对象,是一个 Vue 应用,它内部提供的方法是针对整个应用的,而不再是一个特殊的组件。体现在使用 typescript 重构整个 Vue 源码,对冷门的功能进行了删除,并且整个源码的结构变为了使用 Monorepo 进行管理,这样粒度更细,不同的包可以独立测试发布。
2025-02-24 18:33:28
815
原创 浏览器渲染流程-----一篇文章彻底搞会
举个例子,假如你现在想通过电话告诉你的朋友你身边的一幅画的内容:“画布上有一个红色的大圆圈和一个蓝色的正方形”,单凭这些信息你的朋友是很难知道这幅画具体是什么样子的,因为他不知道大圆圈和正方形具体在页面的什么位置,是正方形在圆圈前面呢还是圆圈在正方形的前面。另外,还有一个重要的点你需要知道,生成绘制指令集后,渲染主线程的工程就暂时告一段落,接下来主线程将每个图层的绘制信息提交给合成线程,剩余工作将由合成线程完成。另外需要注意的是,这里所指的浏览器确定每一个节点的样式,是指在样式计算时会对所有的。
2025-02-23 13:21:43
709
原创 JS数据类型转换原理技巧-----(一篇文章搞懂JS所有转换原理)
强制转换主要指使用Number()String()和Boolean()三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。Number( )使用Number函数,可以将任意类型的值转化成数值。下面分成两种情况讨论,一种是参数是原始类型的值,另一种是参数是对象。原始类型值的转换规则如下。// 数值:转换后还是原来的值// 字符串:如果可以被解析为数值,则转换为相应的数值// 字符串:如果不可以被解析为数值,返回 NaN// 空字符串转为0。
2025-02-03 22:30:44
606
原创 let、var、const的区别-----(JS高频面试题)
var关键字没有块级作用域的概念有全局作用域、函数作用域的概念不初始化值默认为undefined存在变量提升全局作用域用var声明的变量会挂载到window对象下同一作用域中允许重复声明let关键字有块级作用域的概念不存在变量提升暂时性死区同一块作用域中不允许重复声明const关键字与let特性一样,仅有2个差别区别 1:必须立即初始化,不能留到以后赋值区别 2:常量的值不能改变。
2025-01-26 15:04:26
626
原创 Promise超级思路讲解-----(看完从0到1实现浅入深出)
/ 若返回的是Promise,则method得到的Promise状态和其一致。// 等同于 await Promise.resolve(1)// 该函数的返回值是Promise完成后的数据。若没有相关的后续处理,新任务的状态和前任务一致,数据为前任务的数据。后续执行后返回的是一个任务对象,新任务的状态和数据与该任务对象一致。后续处理执行无错,新任务的状态为完成,数据为后续处理的返回值。若后续处理执行了,则根据后续处理的情况确定新任务的状态。后续处理执行有错,新任务的状态为失败,数据为异常对象。
2025-01-25 19:07:25
794
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人