- 博客(98)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 MacBook Air 快捷键
打开谷歌控制台: option + command + i注释html文件内容: option + shift + a 效果:<!-- 注释html文件内容 -->
2021-08-01 20:35:34
3835
原创 vue2 element ui 的表格使用 sortablejs 拖拽列遇到的问题和解决方案
项目使用element ui 的表格实现拖动表头可改变列的宽度,又使用sortablejs实现表格的列可拖拽到其他列的位置,导致出现如下的一些问题:1、某一列宽变大或变小后,只有当前列可拖拽,其他列无法拖拽。解决方案:在列宽发生改变后,销毁当前拖拽实例,再重新创建拖拽实例。this.sortDemo.destroy()2、当表格没有横向滚动条时,某一列宽变大或变小时,其他列宽也会变大或变小。根因:表格的列不够多,不足以撑开表格的整体宽度。结论:当表格没有横向滚动条时,拉宽某一列,表
2023-07-16 23:23:27
3251
12
原创 35、js - 面试 - 如何一次渲染10万条数据?
如何一次渲染10万条数据?面试官想了解:面试者对原生js底层的了解、对渲染机制的理解。思路:第一种方案:分页 + setTimeout()第二种方案:分页 + window.requestAnimationFrame()减少重排 第三种方案:分页 + window.requestAnimationFrame() + document.createDocumentFragment()文档碎片
2023-06-13 18:50:18
474
原创 git的使用
git是一款免费、开源的版本控制系统,用于高效地处理任何或大或小的项目。作用:文件存档备份文件版本管理多人协同合作(自动合并)(1)创建不同分支的作用不同的分支代表不同的功能,可以独立开发和维护提交版本的记录,每个分支是互相独立的,和别的分支互不影响,尤其是多人👥开发同一项目,可以分别控制自己的代码。(2)如何编写代码:1️⃣切换到不同功能的分支去写业务代码。2️⃣暂存。3️⃣提交(会在对应的分支下产生提交记录,不会影响到别的分支)。4️⃣。
2023-06-10 18:44:50
1246
原创 33、js - 面试 - 事件循环 微任务 宏任务
事件循环 微任务 宏任务js是单线程语言,也就是某一刻只能执行一行代码,为了让耗时代码不阻塞其他代码运行,设计了事件循环模型。事件循环是一个并发模型,负责执行代码、收集异步任务的模型,在调用栈空闲,反复调用任务队列里回调函数的执行机制,就叫事件循环。(1)调用栈的代码先执行。(2)遇到宏任务,就把宏任务放到宿主环境里进行计时,时间到了宏任务会到宏任务队列里进行排队等待执行。(3)当调用栈的代码执行完了,会先执行微任务队列里的任务。(4)微任务队列里的任务都执行完了,最后才执行宏任务队列里的任务。
2023-06-08 22:05:47
815
原创 32、js - async await 与 线程休眠
async await:让异步代码写起来像同步代码一样 try{}catch(){}只能用于捕获同步代码的错误,所以下面可以使用try{}catch(){} async是函数的修饰符,与函数一起使用
2023-06-08 22:02:58
175
原创 31、js - Promise
Promise基本使用Promise的静态方法 Promise.all()作用:高并发处理,同时发送请求,可以做到在所有请求都得到结果后再统一渲染页面数据语法:Promise.all([p1, p2, p3, p4]) all方法里传一个数组,数组由多个Promise对象组成返回结果:会返回一个新的Promise对象,.then()得到的结果是all()方法里多个Promise对象的结果组成的数组,.catch()方法里只要有一个请求发生错误就会走catch->调用了resolve(),把状态改
2023-06-08 11:56:37
614
原创 28、js - axios的基本使用
axios:没写method配置项,默认是get请求,query查询数据(属于get请求):需要params配置项,可以省略method配置项,请求数据(属于post请求):1、需要data配置项,2、需要method配置项执行完axios()方法得到的是promise对象,所以可以在axios()方法后面使用.then().catch()
2023-06-07 10:37:17
270
原创 25、js - 面试 - 节流
节流:单位时间内,频繁地触发事件,只执行一次 使用场景:高频事件:鼠标移动mousemove、页面尺寸缩放resize、滚动条滚动scroll等等
2023-06-07 10:31:04
72
原创 26、js - 节流案例1:用节流记录视频播放时间
用节流记录视频播放时间 视频时间更新事件:当视频的currentTime更新时会触发timeupdate事件
2023-06-07 10:31:00
362
原创 23、js - 面试 - call()apply()bind()
一、call() call()的作用:1、会直接调用函数2、会改变this指向 参数1:this指向 ,剩余参数:传给函数的参数。二、apply(),apply()的作用:1、会直接调用函数,2、会改变this指向。参数1:this指向,参数2:传给函数的参数,必须是个数组。 三、bind()。bind()的作用1、不会直接调用函数,2、会改变this指向, 3、会返回一个新函数,新函数里的this指向参数1,参数1:this指向,剩余参数:传给函数的参数
2023-06-06 15:00:53
83
原创 22、js - 处理异常
throw new Error('必须要传 a 和 b'); try { } catch(error){ } finally { } try:捕获异常 catch:处理异常,可以通过error参数获取到报错信息finally:不管是否有异常,最后都会执行
2023-06-06 14:58:00
84
原创 21、js - 面试 - 深拷贝
1、序列化 反序列化 JSON.parse(JSON.stringify())2、lodash的 _.cloneDeep()3、全局的structuredClone()4、自己手写递归函数实现深拷贝
2023-06-06 14:55:27
149
原创 17、js - 面试 - instanceof
instanceof:精确判断引用数据类型。instanceof原理:判断构造函数的原型对象是否在实例对象的原型链上
2023-06-06 14:50:53
91
原创 18、js - 面试 - 原型继承
先考虑父级,再考虑子级 1、父级: 人公共的属性和方法有哪些,做成构造函数进行封装 注意:一般公共的属性写到构造函数内部,公共的方法挂载到构造函数的原型对象上 2、子级: 男人继承人类的属性和方法,之后创建自己独有的属性和方法 女人同理 注意:因为对象覆盖了原型对象,所以再把constructor指回当前的构造函数 Man.pro
2023-06-06 14:50:04
54
原创 16、js - 面试 - 实例对象的__proto__
实例对象的__proto__ p1.__proto__ 在控制台显示成:[[Prototype]] 实例的__proto__ === 原型对象
2023-06-06 14:48:25
73
原创 12、js - 面试 - 数组方法
js - 数组方法:filter() reduce() some() every() concat() sort() reverse()
2023-05-26 16:47:58
66
原创 10、js - 面试 - 箭头函数
总结:如何选择是否使用箭头函数: 1、dom元素注册事件,需要用到this时,就使用function,不要用箭头函数 2、定时器/延时器,需要用到this时,就用箭头函数 3、平时开发,优先选择使用箭头函数,不行再换成function
2023-05-24 17:36:28
120
原创 8、js - 剩余参数
剩余参数和arguments的区别1、...语法符号,置于最末形参之前,用于获取多余的实参2、借助...获取的剩余实参,是个真数组3、剪头函数不支持arguments,但是可以使用剩余参数4、开发中,提倡多使用剩余参数
2023-05-24 14:19:15
128
原创 7、js - 面试 - arguments伪数组
arguments已经被淘汰 原因:1、可变参数的出现,es6新特性 2、特性问题arguments是一个伪数组,仅存在于函数中,作用是装载所有实参,伪数组用不了数组的方法因为arguments是动态伪数组,数据变化带来的性能损耗较大每次都会同步更新所有参数,如果参数过多则会出现问题在开启严格模式后就会彻底禁用arguments现在开发中基本不用arguments,可以使用可变参数完全替代arguments的功能arguments.callee代表函数本身,一般用于匿名函数自调后
2023-05-24 11:35:50
130
原创 6、js - 面试 - 函数提升
函数提升:函数声明的方式声明函数,整个函数会提升。函数表达式的方式声明函数,只有 var func2; 会提升,func2 = function(){}不会提升
2023-05-24 10:15:00
45
原创 4、js - 面试 - 闭包
闭包:函数嵌套函数,内层函数访问了外层函数的局部变量。bug就不可以,但是下面的案例是语言特性本身的特点导致的内存泄漏,是我们无法阻止的泄漏,必须用闭包的时候还是得用闭包。(1)由于闭包空间的内存无法被及时地释放,因此会导致内存泄漏,但这个又是必要的,也是闭包的一个特点。举例:如果count变量不想被外面的人或者全局的人修改,因此可以放在闭包空间里面。(2)本该被释放的变量,无法及时释放,会存在闭包空间中,让这个变量可以更久远地使用。很显然,func1()执行完后,变量b已经被释放了,但是变量a不会被释放。
2023-05-23 17:57:59
394
原创 3、js - 面试 - 垃圾回收机制
在典型的代码中,许多对象的生命周期都很短:它们出现、完成它们的工作并很快死去,因此在这种情况下跟踪新对象并将其从内存中清除是有意义的。关于垃圾回收,js引擎做了许多优化,使垃圾回收运行速度更快,也使得现代浏览器的性能越来越高,并且不会对代码执行引入任何延迟。主要看当前创建的对象在堆内存中有没有被其他对象引用,如果没有被其他对象引用,那么该对象将被垃圾回收机制回收。两个对象内的属性相互引用对象,两个对象的引用计数永远大于0,无法回收导致内存泄漏。,对开发者来说,js的垃圾回收机制是自动的、无形的。
2023-05-22 19:41:14
674
原创 2、vue-router路由的多种传参方式
编程式导航的name和params的组合传参,如果没有和动态路由一起使用,详情页通过route.params来获取参数值,控制台会报警告。这是于2022年8月22日4.1.4版本的路由开始设置的,这样做的原因是“刷新页面获取到的参数会丢失”,详见。这是已知的瞬间状态,并且由于它在导航守卫中,因此在重新加载页面时将被保留。,并且详情页得到的route.params是个空对象{}。vscode插件: JSON to TS。修改方案:见路由传参的其他方式。1、选中json文件的内容。
2023-05-16 10:24:46
3441
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人