自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 谈谈变量提升,变量的?函数的

变量提升是 JavaScript 中的一个特性,在代码执行之前,变量和函数声明会被提升到其所在作用域的顶部。使用 var 声明的变量会被提升到其所在函数的顶部或全局作用域的顶部(如果在函数外部声明的话)。使用 function 声明的函数会被整体提升到其所在函数的顶部或全局作用域的顶部。虽然变量和函数的声明会被提升,但它们的初始化或赋值操作并不会提升。在变量被声明之前,可以使用该变量,但其值为 undefined。变量赋值的行为不会被提升,只有变量声明会被提升。在函数被声明之前,就可以调用该函数。

2023-09-20 21:15:33 107 1

原创 React面试题

统一管理:将所有的action-type的常量,进行统一管理,创建一个单独的文件或模块,定义和导出所有的action-type的常量,避免action-type的常量重复命名空间:使用命名空间,来防止action-type的常量重复唯一性检查:可以编写脚本或工具检查,确保没有重复定义,检查常量的唯一性,给出警告或错误提示。使用工具库:使用一些工具库来帮助管理和防止常量重复。例如redux-actions来自动生成action-type的常量,根据action名称生成唯一常量。

2023-08-25 20:14:26 128

原创 说说你对 Object.definePropety()的理解

Object.defineProperty()方法可以直接在一个对象上定义新属性或修改现有属性,并返回该对象。可以定义属性的配置如writable、enumerable、configurable等。使用configurable: false可以防止属性在被删除或属性特性重新定义。可以将属性设置为只读,在内部实现数据更新,外部无法修改。可以定义getter和setter访问一个属性的值。不需要使用对象属性赋值的方式,可以直接定义。可以修改现有属性的配置,如从可写改为只读。精细控制对象属性的特性。

2023-08-22 21:41:46 114

原创 .Js 数据类型判断都有哪几种方式? 至少说出5 种? 它们的区别是什么

5.Object.prototype.toString.call(变量).slice(8,-1)Object.prototype.toString.call(变量).slice(8,-1)Object.prototype.toString.call(变量)typeof只能判断基本类型,instanceof判断对象构造函数。toString()和slice方法可以准确判断所有类型。可以判断基本类型,解决typeof null问题。泛型typeof可以判断null类型。可以判断对象的构造函数类型。

2023-08-22 21:39:38 87

原创 React前端面试题

闭包是指在一个内部函数中访问外部函数作用域的变量的能力。简单来说,闭包就是能够记住并访问定义时的词法环境的函数。优点数据封装:闭包可以将变量和函数封装在内部函数中,隐藏实现细节,只暴露需要的接口。2.保持状态:闭包可以保持函数执行时的状态,可以在函数执行完毕后继续访问和使用。3.实现函数工厂:闭包可以用于动态生成函数,根据不同的参数生成不同的函数。缺点1.内存消耗:闭包会将外部函数的变量和内部函数一起保存在内存中,如果闭包不被正确释放,可能导致内存泄漏。

2023-08-19 07:33:41 144

原创 React的props.children使用map函数来遍历会收到异常显示,为什么?应该如何遍历?

使用React.Children.map:React提供了React.Children.map方法来遍历props.children,无论props.children是单个React元素还是多个React元素,都能正常工作。将props.children转换为数组:可以使用Array.from或展开运算符[...]将props.children转换为一个数组,然后再使用map函数进行遍历。在这种情况下,props.children将不是一个数组,而是一个单独的React元素。

2023-08-18 15:20:01 230

原创 说说React中的虚拟dom?在虚拟dom计算的时候diff和key之间有什么关系?

key属性是在虚拟DOM的渲染中用于标识唯一子元素的属性。在虚拟DOM的比较过程中,React使用key属性来追踪组件及其子元素的身份,以便更准确地确定哪些元素需要更新。虚拟DOM(Virtual DOM)是React中的一个概念,它是一个轻量级的JavaScript对象,用于表示真实DOM的抽象层。根据差异,React会将需要更新的部分应用到真实DOM中,只更新发生变化的部分,而不是整个DOM树。React将新的虚拟DOM树与之前的虚拟DOM树进行比较,找出两者之间的差异(即diff算法)。

2023-08-18 15:18:11 35

原创 props和state相同点和不同点?render方法在哪些情况下会执行?

State(状态)是组件内部管理的数据,可以通过setState()方法进行修改。当组件的props或state发生变化时,会触发组件的重新渲染,即再次调用render方法。当父组件重新渲染时,子组件也会重新渲染,即调用子组件的render方法。Props(属性)是从父组件传递给子组件的,组件内部无法直接修改。通常用于存储用户输入、组件特定的数据或需要在组件内部更新的数据。用于存储组件内部的状态数据,可以在组件内部进行修改。都可以用于将数据从父组件传递给子组件。用于存储组件外部的数据,应该被视为不可变的。

2023-08-18 15:13:55 72

原创 实现一个 myMap,方法,可以跟数组 map 方法一样,可以进行数组循环并且,可以返回新的数组

然后,使用 for 循环遍历数组 arr,对于每个元素,调用回调函数 callback,并将当前元素、索引和原始数组作为参数传递给回调函数。在上述示例中,定义了一个名为 myMap 的函数,它接受两个参数:arr(要进行循环的数组)和 callback(每个元素的回调函数)。最后,将回调函数的返回值添加到新数组 result 中,并在循环结束后返回该数组。在函数内部,创建了一个空数组 result,用于存储回调函数返回的值。

2023-08-18 14:44:22 73 1

原创 typescript 中都有哪些修饰符,说明他们的作用

5.static: 静态修饰符,表示成员属于类本身,而不是类的实例。3.protected: 受保护的修饰符,表示成员可以在类内部和子类中访问,但在类外部无法访问。4.readonly: 只读修饰符,表示成员只能在声明时或构造函数中被赋值,之后无法再修改。1.public: 默认的修饰符,表示成员是公共的,可以在类内部、子类和类外部访问。2.private: 私有修饰符,表示成员只能在类内部访问,子类和类外部无法访问.在 TypeScript 中,类的修饰符用于控制类成员的可访问性和可继承性。

2023-08-16 18:52:18 103 1

原创 interface和 type的区别

适用于定义对象的结构和方法,type 适用于定义更复杂的类型、联合类型和交叉类型。可以定义多个同名的接口,并且 TypeScript 会将它们自动合并为一个。声明的类型在错误信息和文档中更易读,因为它们提供了更清晰的结构和描述。可以定义对象类型、联合类型、交叉类型等,并且还支持更高级的类型操作。主要用于定义对象类型,可以描述对象的结构和方法签名。定义的类型可能更适合用于复杂的类型操作和类型别名。不支持合并,如果定义多个同名的类型,会报错。不支持类的实现和继承。都用于定义自定义类型。

2023-08-15 20:56:37 363

原创 函数重载的理解

函数重载(Function Overloading)是指在编程中允许同一个函数名定义多个具有不同参数类型或参数个数的函数,根据不同的参数类型或参数个数来确定调用哪个函数。目的是为了提供更灵活的函数调用方式,使函数能够处理不同类型或数量的参数,而无需使用不同的函数名。通过函数重载,可以提高代码的可读性、可维护性和可扩展性。函数重载通常通过定义多个函数签名来实现。每个函数签名包含函数名和参数列表,可以根据参数的类型和数量进行匹配和调用。

2023-08-15 20:51:21 693

原创 如何使用css实现一个三角形,写出两种以上方案得满分

伪元素来创建一个相同大小的透明三角形,通过设置边框的属性来绘制。方案一:使用 border 属性。的宽度和高度,可以创建不同形状和大小的三角形。首先,设置一个容器元素。为需要的高度,可以创建一个等腰三角形。的宽度和高度,并设置背景颜色。属性来绘制三角形, 设置。

2023-08-14 21:08:47 442

原创 说说 React 生命周期有哪些不同的阶段? 每个阶段对应的方法是

componentWillMount: 在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。shouldComponentUpdate():用于控制组件重新渲染的生命周期,state发生变化,组件会进入重新渲染的流程,在这里return false可以阻止组件的更新。​ componentWillReceiveProps: 在接受父组件改变后的props需要重新渲染组件时用到的比较多,外部组件传递频繁的时候会导致效率比较低 ​。(3)卸载或销毁阶段: ​。

2023-08-14 21:04:42 56

原创 React前端面试题1

非受控组件,简单来讲,就是不受我们空值的组件,一般情况是在初始化的时候接收外部数据,然后自己在内部存储其自身状态 大部分时候推荐使用受控组件来实现表单,因为在受控组件中,表单数据由react组件负责处理,如果选择非受控组件的话,控制能力较弱,表单数据就由dom本身处理,但更加方便快捷,代码量少。子组件向父组件通讯:props+回调的方式,父组件向子组件传递props进行通讯,此props为作用域为父组件自身的函数,子组件调用该函数,将子组件想要传递的信息,作为参数,传递到父组件的作用域中。

2023-08-13 22:00:58 50 1

原创 如何通过原生js 实现一个节流函数和防抖函数,写出核心代码,不是简单的思路

节流函数防抖函数。

2023-08-13 21:57:18 49 1

原创 说说javascript内存泄漏的几种情况

JavaScript 内存泄漏是指不再需要的内存仍然被占用,无法被垃圾回收器回收,导致内存占用持续增加,最终可能导致应用程序的性能问题。未及时清理的定时器和回调函数。未被释放的 DOM 引用。

2023-08-13 21:41:17 67 1

原创 找出数组[1,2,3,4,5,3,2,2,4,2,2,3,1,3,5] 中出现次数最多的数,并统计出现多少次,编写个函数?

2023-08-10 21:37:40 69 1

原创 React性能优化的手段有哪些

(这是在重新渲染组件之前触发的其中一个生命周期事件)生命周期事件,可以利用此事件来决定何时需要重新渲染组件;不要使用内联函数定义(如果我们使用内联函数,则每次调用“是一个高阶组件),对 于相同的输入,不重复执行;来进行组件优化,依赖没有变化的话,不重复执行;”函数时都会创建一个新的函数实例);系列的生命周期中进行异步请求,操作。如果是类组件,事件函数在。避免使用内联样式属性;

2023-08-10 20:45:18 35 1

原创 扩展运算符都有哪些作用,详细介绍一下

4.可以克隆对象: string、number、boolean时属于深拷贝,object、Array时,属于浅拷贝: obj1={foo:bar',x:2cloneobj=[...obj1}(foo:bar',x:2))3.合并数组: arr1=[1,2,3] arr2=[4,5,6][...arr1,...arr2](1,2,3,4,5,6)2.可以进行数组浅拷贝:arr=[1,2,3] arr2=[...arr](1,2,3)1.可以构造数组 :[1,...[2,3]]---[1,2,3]

2023-08-09 20:50:59 47

原创 Redux实现原理

通过store的dispatch方法发出一个action用于修改值,可以理解为告诉redux我们准备做的事)在reducer中接收发出的值,通过return 返还最新的值redux接收到新的state对象后,通知store.subscribe0函数执行。,组件可以派发(dispatch)行为(action)给公共store,而不是直接通知其他组件,组件内部通过订阅。首先创建store:使用redux提供的createStore方法创建一个store对象,Redux是将整个应用状态存储在一个公共的。

2023-08-09 20:46:39 25

原创 对自定义hook的理解,模拟简易版的useState

自定义 Hook 是 React 的一项特性,允许我们将组件逻辑进行封装和复用。通过自定义 Hook,可以提取组件中的状态逻辑、副作用等,并在不同组件中共享这些逻辑。自定义hook是一个函数,一般以"use"开头,以示和内置的hook区分。看上去像一个普通函数,函数内部可以调用其他Hook。函数,接收一个初始值作为参数。使用闭包,创建了一个局部变量。函数,它接收一个新的值作为参数,并将。最后返回一个数组,包含。,并将初始值赋给它.,使其可在组件中使用。

2023-08-08 20:08:58 127

原创 Git命令,附带命令作用

git push origin --delete [branch-name] 删除远程分支。git branch [new-branch-name] 新建一个分支,但依然停留在当前分支。git checkout -b [branch] 新建一个分支,并切换到该分支。git merge [branch] 合并指定分支到当前分支(合并就类似于覆盖)步骤一:获取远程分支,在拉取某个分支之前,需要先获取远程仓库中的所有分支信息。git branch -d [branch-name] 删除分支。

2023-08-08 19:08:56 23

原创 封装一个使用递归方式的深拷贝方法deepClone

方法对每个属性值进行深拷贝。这样可以确保对于每个属性值,如果它是对象或数组,会递归地进行深拷贝。上述方法只能实现对对象和数组的深拷贝,对于其他引用类型(如函数、正则等)可能无法正确进行深拷贝。首先判断传入的对象是否为 null 或不是一个对象类型,如果是,则直接返回原始值。,如果是数组,则创建一个空数组,如果是对象,则创建一个空对象。循环遍历原始对象的所有属性,并通过递归调用。根据传入的对象类型创建一个对应的克隆对象。最后,返回深拷贝后的克隆对象。

2023-08-07 20:32:47 84

原创 面向对象编程的方式的理解

对象是一个具有特定属性和方法的实体,可以通过调用对象的方法来实现对数据的操作。2.继承:是指通过定义一个类(父类/基类),从中派生出其他类(子类/派生类),子类继承了父类的属性和方法,并可以在此基础上进行扩展和修改。1.封装:是将数据和对数据的操作封装在对象中,通过访问权限控制,只暴露必要的接口给外部使用,隐藏内部实现细节。提高代码的安全性和可维护性。2.可复用性:通过封装和继承的机制,将代码进行复用,减少了重复编写代码的工作量。4.安全性:通过封装和访问权限控制,可以保护数据地安全性,提高代码的安全性。

2023-08-07 19:28:42 25

原创 js类型检验的方式

3.Object.prototype.toString方法:获取一个对象的内部[[Class]]属性,从而判断其类型。2.instanceof操作符:可以检查一个对象是否属于某个类或构造函数的实例。1.typrof运算符:可以检查一个值的类型。返回一个表示值类型的字符串。4.Array.isArray方法:用于检查一个值是否为数组的方法。5.自定义类型检查函数:根据自己需求编写自定义类型检查函数。

2023-08-06 19:52:42 86

原创 事件循环的理解,以及应用理解

2.响应用户交互:事件循环使得我们可以响应用户的交互操作,如点击、滚动和键盘输入等、通过将事件回调函数放入事件循环中,我们可以在用户触发事件时执行相应的操作。4.事件循环采用循环的方式,不断重复执行异步任务队列中的任务。每个任务都会在自己的执行上下文中执行,并且在执行完成后可能会产生新的异步任务。同步任务会立即执行,而异步任务会被放入事件循环中等待执行。7.在任务执行期间,如果有新的异步任务产生,会被放入相应的异步任务队列中等待执行。3.当所有的同步任务执行完毕后,事件循环开始执行异步任务队列中的任务。

2023-08-06 19:27:09 53

原创 闭包的理解,优点缺点,应用场景

2.性能影响:闭包的作用域链比普通函数更长,访问外部变量的速度较慢,可能会影响函数的执行效率。1. 数据封装:闭包可以将变量和函数封装在内部函数中,隐藏实现细节,只暴露需要的接口。2.保持状态:闭包可以保持函数执行时的状态,可以在函数执行完毕后继续访问和使用。3.实现函数工厂:闭包可以用于动态生成函数,根据不同的参数生成不同的函数。4.延迟函数执行:闭包可以用于延迟函数执行,保存函数的状态和参数,在需要时执行函数。1.保持状态和数据的私有性:闭包可以用于创建私有变量和函数,保护数据的安全性。

2023-08-06 19:06:11 93

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除