
js高级知识点
文章平均质量分 59
F-125
前端学习记录
展开
-
JS的深拷贝函数
引入的赋值:指向同一个对象,相互之间会影响;对象的浅拷贝:只是浅层的拷贝,内部引入对象时,依然会相互影响;对象的深拷贝:两个对象不再有任何关系,不会相互影响;}// 判断传入的originValue是否是一个对象类型if(!}}}原创 2022-09-23 15:41:22 · 360 阅读 · 0 评论 -
JS中的节流函数throttle的理解与封装
/ 1.记录上次触发时间,第一次默认为0// 2. 实现节流的处理函数// 3. 获取每次触发当前时间// 4. 获取下次触发节流响应函数的剩余时间// 5. 当下次触发响应函数时间小于0时,说明达到节流时间间隔,执行函数// 绑定需要节流的时间this,以及传递的参数// 保留本次执行后的当前时间,供下次触发时做处理判断}}// 返回节流函数}原创 2022-09-23 10:59:01 · 1256 阅读 · 0 评论 -
JS的防抖函数理解、手动封装
在输入框频繁输入内容时,并不会输入一次就触发一次对应需要的操作,而是等待一定时间,待用户在这段时间内没有输入时,才会触发事件,就是通过防抖函数,实现在输入等待一段时间后,触发事件,不会频繁触发输入框的输入事件,这样很浪费性能,造成服务器的请求压力;原创 2022-09-22 20:38:54 · 435 阅读 · 0 评论 -
JS模块化-CommonJS/ES Module
图结构在遍历的过程中,有深度优先搜索(DFS, depth first search)和广度优先搜索(BFS, breadth first search);1> 查找X/index.js文件 2> 查找X/index.json文件 3> 查找X/index.node文件;1> 直接查找文件X 2> 查找X.js文件 3> 查找X.json文件 4> 查找X.node文件;结论一:模块在被第一次引入时,模块中的js代码会被运行一次;结论二:模块被多次引入时,会缓存,最终只加载(运行)一次;原创 2022-09-21 10:15:35 · 373 阅读 · 0 评论 -
JS的ES6中的生成器
生成器是ES6中新增的一种函数控制、使用的方案,它可以让我们更加灵活的控制函数什么时候继续执行、暂停执 行等。return传值后这个生成器函数就会结束,之后调用next不会继续生成值了。后面调用也获取不到value值, done状态也会变成true;①生成器函数需要在function的后面加一个符号:*原创 2022-09-19 20:33:07 · 135 阅读 · 0 评论 -
JS的迭代器、可迭代对象
迭代器(iterator),是确使用户可在容器对象(container,例如链表或数组)上遍访的对象,使用该接口无需关心对象的内部实现细节。从迭代器的定义我们可以看出来,迭代器是帮助我们对某个数据结构进行遍历的对象。在JavaScript中,迭代器也是一个具体的对象,这个对象需要符合迭代器协议(iterator protocol):①迭代器协议定义了产生一系列值(无论是有限还是无限个)的标准方式;②那么在js中这个标准就是一个特定的next方法;原创 2022-09-19 18:49:11 · 1006 阅读 · 2 评论 -
JS的ES6中Promise的简单实现
Promise是ES6中新增的一个内置类,在通过new常见Promise时,需要传入一个回调函数,称之为executor当调用resolve回调函数,会执行Promise对象的then方法传入的回调函数;当调用reject回调函数,会执行Promise对象的catch方法传入的回调函数;原创 2022-09-19 12:03:34 · 314 阅读 · 0 评论 -
响应式原理——vue3/vue2
obj = {age: 20}类似vue里面的template语法里的{{obj.name}}中对对象的属性引用,当对象中的属性改变时,template中的展示内容也会自动改变,这就是vue中实现的响应式原理。原创 2022-09-18 16:37:05 · 404 阅读 · 0 评论 -
JS的Proxy、Reflect的理解和使用
即监听obj与代理对象objProxy的set操作都监听到了,通过receiver改变obj中get与set方法中的this指向。但是Object作为一个构造函数,实际上很多操作都放到Object上并不合适,所以ES6新增Reflect来集成这些操作。①可以看到我们是可以通过跟这个方法监听到的,但是,对这个对象新增、删除对象属性的操作时,我们是监听不到的;Reflect提供了很多JavaScript的对象的方法,有点像Object操作对象的方法;操作的都是obj对象的代理对象objProxy。原创 2022-09-18 11:33:45 · 540 阅读 · 0 评论 -
JS的ES6新增数据结构Set、WeakSet、Map、WeakMap
②WeakMap的key对对象的引用是弱引用,果没有其他引用对某个对象进行引用,那么GC可以对该对象进行回收;②WeakSet对元素的引用是弱引用,如果没有其他引用对某个对象进行引用,那么GC可以对该对象进行回收;某些情况下我们希望通过其他类型作为key,比如对象,这个时候会自动将对象转成字符串作为key;①WeakMap的key只能是对象,不接受其他类型作为key;Set是一个新增的数据结构,可以用来保存数据,类似于数组,①WeakSet只能存放对象类型,不能存放基本数据类型;原创 2022-09-17 20:42:02 · 499 阅读 · 0 评论 -
JS的ES6新增基础知识点
let关键字:直观角度,let和var没有太大区别,都是用于声明一个变量;const关键字:声明常量,表示保存的数据一旦被赋值,就不能再修改,如果赋值的是引用类型,那么可以通过引用找到对应的对象,修改对应的内容;注意:let、const不允许重复声明变量;原创 2022-09-17 17:13:30 · 402 阅读 · 0 评论 -
JS的ES6中的类使用
构造方法在new操作符,创建实例时调用,实例方法绑定到原型prototype上,静态方法绑定到类本身上this._address = "广州市"}// 普通的实例方法// 创建出来的对象进行访问}}}原创 2022-09-17 11:21:19 · 372 阅读 · 0 评论 -
JS的原型链和继承
我们每个对象中都有一个[[prototype]],这个属性可以称之为对象的原型(隐式原型)当从一个对象中获取某一个属性时,会触发[[get]]操作// 1. 当前对象中去查找对应的属性,如果找到就直接使用// 2. 如果没有找到,就会沿着它的原型去查找。原创 2022-09-16 21:14:10 · 250 阅读 · 0 评论 -
JS的面向对象、对象属性的操作
开发中默认下划线开头的参数或方法认为时私有方法, 不希望直接访问或调用_age: 18,}}name: {},age: {},}}})// 看不到age// 但是直接拿是可以拿到的。原创 2022-09-16 15:06:41 · 227 阅读 · 0 评论 -
JS中函数的柯里化
②柯里化函数在执行调用后,若没有引用指向该柯里化函数,会被释放回收内存,不会引起使用闭包而造成的内存泄漏。①只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数,这个过程就称之为柯里化;①希望一个函数处理的问题尽可能的单一,而不是将一大堆的的处理过程交给一个函数处理;② 柯里化后的函数可复用性。原创 2022-09-15 20:39:24 · 227 阅读 · 0 评论 -
JS中的arguments、纯函数、组合函数
slice 只要传入一个start/end,那么对一个同一个数组来说, 它会给我们返回确定的值slice 函数本身不会修改原来的的数组slice 函数就是一个纯函数。表示在执行一个函数时,除了返回函数值外,还对调用函数产生了附加的影响,比如修改了全局变量,修改参数或者改变外部的存储;splice 函数在执行时,会修改调用的数组本身对象,修改这个操作就是产生的副作用splice 函数就不是一个纯函数。②使用时,输入的内容不会被任意篡改,并且自己确定的输入,一定会有确定的输出;arguments是一个类数组。原创 2022-09-15 20:31:57 · 234 阅读 · 0 评论 -
JS实现apply-call-bind函数的实现原理
这三种显示绑定this的函数,在js引擎中实现原理是j用c++编写的,想要了解实现原理,可以下载v8引擎源码进行查阅,本文章中只是做了个简单实现,可能还有很多边界情况没有考虑!要求传入的参数以数组形式传入。调用后会返回一个函数。原创 2022-09-15 16:45:08 · 271 阅读 · 0 评论 -
JS中的闭包理解,闭包的产生原因及解决方式
分类两个层面去理解:广义角度说,JavaScript中的函数都是闭包(因为所有定义的函数都可以访问外层作用域变量,即产生了闭包)狭义角度说,JavaScript中的一个函数,如果访问了外层作用域的变量,那么它是一个闭包(即访问了外层作用域的变量,才算生成闭包)原创 2022-09-14 20:30:51 · 1619 阅读 · 0 评论 -
JS的变量查找、内存管理与垃圾回收机制
②标记清除:这个算法是一个根对象,垃圾回收器会定期从这个根开始,找所有从根开始有引用到的对象,对哪些没有引用到的对象,就认为是不可用对象;JS引擎比较广泛的采用的就是标记清除法,类似V8引擎为了更好的进行优化,在它算法实现细节上会结合一些其他的算法。①引用计数:被引用时通过计数变量记录,待引用计数变量为0时,回收内存空间 存在弊端 循环引用。 复杂数据类型如数组,对象等的内存分配由堆空间通过指针返回值变量引用。基本数据类型的内存分配由栈空间进行分配。原创 2022-09-14 12:12:27 · 768 阅读 · 0 评论 -
JS从编译到运行代码的过程
3.1 在编译阶段如果有函数(例foo)定义,会在内存开辟新的一块空间存储0xa00,全局对象GO里面定义的函数(f00)保存的是该空间地址 foo: 0xa00(引用),存储在堆内存,该地址存储包含函数的 ①父级作用域scope:parentScope 指向VO:GO 即指向GO ②函数执行体(代码块)。3.2 全局运行阶段,在上下文栈ECStack(函数调用栈),会首先通过GO找到函数指向地址,并创建一个函数执行上下文(Functional Execution Context)FEC。原创 2022-09-13 20:58:21 · 1027 阅读 · 0 评论