- 博客(40)
- 收藏
- 关注
原创 es6和commonjs模块化规范的深入理解
这个规范的导出方式其实都是在操作module.exports这个对象,exports实际上只是提供的一个简写,exports也是指向module.exports这个对象的,我们可以直接操作这个对象,往这个对象里面添加属性,或者直接module.exports = {},直接导出一个新的对象。总结:两种方式都是使用一个对象作为对外接口,es6使用的是Module这个实例对象,commonjs使用的是module.exprots这个对象。
2025-12-19 15:51:19
314
原创 Vue中data和props数据代理的区别
data和props都通过代理挂载到实例上,支持this.xxxdata的代理属性可枚举),因此打印实例时可见。props的代理属性不可枚举),因此打印实例时默认隐藏,需手动访问才可见。
2025-10-25 12:40:22
279
原创 Vue组件的一些底层细节
当你将这个配置对象注册到Vue实例的 components 选项中时,Vue内部会自动调用 Vue.extend() 方法来处理这个配置对象。- 继承关系 : VueComponent.prototype.__proto__ === Vue.prototype ,所以组件实例可以访问Vue原型上的方法。1. 组件的注册形式 :注册的是构造函数,这样Vue才能根据需要多次实例化组件。所以注册的实际上是 Vue.extend() 返回的构造函数。- Vue实例 :通过 new Vue() 创建,是根实例。
2025-10-23 21:39:24
361
原创 async/await的基本使用以及fetchAPI的部分细节
关于fetch请求的细节,fetch请求返回的是一个Promise对象,但是,注意哈,上边的代码使用了await处理了返回的Promise对象,也就是说这里最后实际上的返回值是Promise执行完成后的服务器响应对象,也就是response对象。async可以加在函数前,这是这个函数就变成了一个异步函数的环境,但是,很重要的一点,异步函数环境中也是可以有同步代码的,await异步操作之前的同步代码执行是不会受到影响的,但是await异步操作之后的同步代码会延迟执行。
2025-10-02 20:47:05
381
原创 js中异步回调函数的执行机制与事件循环
setTimeOut的延迟事件是1s,但是同步代码的执行需要2s,此时1s后调用栈仍然不为空,定时器的回调函数 fn 会一直在任务队列中等待,只有调用栈完全清空,事件循环才会将任务队列中的回调函数fn放入调用栈执行。2、任务队列:所有异步回调函数,(包括setTimeOut,DOM,Promise等)都会被放入任务队列等待执行。3、事件循环:他的工作就是不断检查调用栈是否为空,如果为空,就会从任务队列中取出第一个任务放到调用栈中执行。1、调用栈:同步代码会按照顺序进入调用栈执行。
2025-10-02 20:14:14
145
原创 手撕JS实现call,apply,bind
就相当于是把myCall的调用者,也就是sayHi那个函数,重新赋值给传给myCall的context参数上下文,也就是person上下文对象,就相当于person对象有了这个方法,然后通过person调用这个方法,this自然就指向了perosn,也就是myCall的参数这样就改变了sayHi函数调用是它内部的this的指向,因为通过myCall函数真正调用sayHi的是person。// 返回一个空对象,且使创建出来的实例的__proto__指向_this的prototype,且完成函数柯里化。
2025-09-30 20:34:37
242
原创 怎么在定义函数参数时给参数设置默认值
/ 输出 null(null 是假值,但不会触发默认值)func2({ num: null });// 输出 10(null 是假值,触发默认值)func1({ num: 0 });// 输出 0(0 是假值,但不会触发默认值)func2({ num: 0 });// 输出 10(0 是假值,触发默认值)// 用 = 设置默认值(仅 undefined 时生效)// 用 || 设置默认值(所有假值都会触发)
2025-09-29 23:39:18
243
原创 用遗传算法解决旅行商问题(JS实现)
下面是js代码实现的,但是js确实天生不适合用来算法,问题规模稍微提高一点,比如种群数量设为1000的时候,代码运行效率真的是非常地慢呀,其实小规模问题,最后的结果还是挺好的,下面看代码,有亿点点长......交叉操作:有序交换个体基因数组中的部分基因,从父代1中选一段基因复制到子代中,再从父代2中选则一段不重复的没有复制到子代的基因,并有序复制到子代中。最佳路径: 6 -> 8 -> 1 -> 0 -> 2 -> 5 -> 7 -> 9 -> 4 -> 3 -> 6。
2025-09-28 20:22:09
163
原创 闭包究竟是什么
表现为 "一个能访问外部函数变量的内部函数",但本质是函数和其绑定的作用域的结合体。这个概念确实容易混淆,关键是要理解:闭包的核心价值在于。,而不只是函数本身。
2025-09-24 18:16:02
105
原创 js中的浅拷贝
这里边的扩展运算符...,对于数组里边的引用类型,复制的仍是这个元素的引用,不是值的复制。浅拷贝的特点:只会给基本类型元素进行拷贝,对于嵌套的对象或者数组,仅仅复制其引用,所以。修改拷贝后的嵌套数据会影响原对象。
2025-09-21 19:13:29
83
原创 js中promise的基本使用
代码的执行过程:pendingundefinedsetTimeout里的回调函数(包含,但它已经被安排进了任务队列,等待时间到了就会触发。0ms ~ 1ms: 调用,向promise注册回调函数,此时promise的状态还是pending,所以回调函数会被promise暂时储存起来(不会立即执行)pending1000ms:异步任务触发调用resolve,resolve是「存入数据的动作」,结果容器是「存储数据的空间」。resolve负责把异步结果 “存进去”,
2025-09-17 21:48:51
318
原创 JS中的原型对象和原型链
prototype指向的是构造函数为所创建的实例准备的一个原型对象,也就是说这个函数的__proto__指向的是另一个,这个函数自身的原型对象。__proto__在对象和函数身上都有,因为函数也是对象。__proto__就是指向这个对象的原型对象,可以说__proto__才真正构成了原型链。找原型对象可以说就是找爸爸,每一个对象的原型对象,也就是它爸爸,只能通过__proto__去找。而他的爸爸在哪呢,其实就是在他的缔造者,他的构造函数身上的prototype属性指向的对象。
2025-08-28 21:28:26
130
原创 JS中的构造函数和普通函数
**在js中,构造函数和普通函数没有什么区别,只是习惯使用大驼峰命名构造函数,普通函数也可以使用 new 关键字去调用。Person { name: '张三' }
2025-08-27 16:44:51
188
原创 vue基础知识点总结
计算属性computed: *****一定注意在计算属性里边写的表面上是一个方法,但是实际上是调用这个方法,并且使用这个方法名字作为vm身上的属性名去使用的,一定不能在插值语法中去调用这个属性fullName(),这样的写法是错误的。// 当有人读取fullName的值的时候,get就会被调用,且返回值作为fullName的值。2.所有不被Vue管理的函数(定时器的回调函数,ajax的回调函数,promise的回调函数)最好写成箭头函数,因为。console.log('numbers改变了')
2025-08-11 14:44:56
318
原创 CoMMEA(Coevolutionary framework for generalized multimodal multi-objective optimization)算法和CMMO算法对比
设计一款无人机,目标为。
2025-07-09 13:41:18
175
原创 CMMO(Coevolutionary Multimodal Multi-objective Optimization)算法的思路
但如果它的目标值接近Pareto前沿,且决策空间分布稀疏,A队可能会保留它(注意这里并不是A队会考虑决策空间的多样性,而是这个多样性的解恰好符合A队的Pareto前沿,所以说是A队被动的选择这个结果,就像上边说的,如果这个多样性的解不符合A队多目标优化的结果,一样会被淘汰)。:B队通过动态调整的ε值,控制“多少稍差的解可以参与进化”,间接影响A队的搜索方向。:两队的后代合并后,A队的环境选择会保留非支配解,B队的环境选择会保留多样性解。,最终A队输出的解集自然包含B队发现的多样性。
2025-07-09 11:22:48
337
原创 关于多模态多目标优化算法的理解
多变量多模态:可能有多个不同的发动机方案,同时还有多个不同的轮胎尺寸方案(这是又一个变量)它们之间可以有多种组合,也就是多种候选方案,当然一个变量也有很多的候选方案,这都是多模态问题。单变量多模态:可能有多个不同的发动机(只是一个变量)方案(比如涡轮增压、电动机),都能达到同样的“速度+油耗”组合。决策空间:就是很多的待选方案,当然这些方案可能只有一个影响因素,也可能有多个影响因素,是这多个影响因素的组合方案。:如果你既要汽车跑得快,又要省油,还要便宜,这就是多目标(互相冲突,跑得快可能费油)。
2025-07-09 10:48:34
283
原创 块级元素和行内元素
最常见的像是 img input 标签都属于可替换元素,他们的表现像是inline-block,但是实际上属于inline。上下内边距比较特殊,视觉上会生效(背景色、边框会扩展),但是不会影响行高,且不会推开周围的元素。常见的块级元素:div, p, h1~h6, ul, li,section。像是特殊的可替换元素 img input,他们表现得就像是行内块元素。其实就是行内元素的特性,再加上可以设置宽高,内外边距。3.宽高,内外边距都可以设置,但是无效。在一行显示,宽度由内容决定,但是他们可以设置宽高。
2025-07-05 14:43:38
230
原创 position定位的详细总结
例如距离顶部10px的时候,就变成固定定位了,所以sticky这个定位中的top、right、bottom、left设置的是相对定位变成固定定位的阈值,或是临界点,它不会像相对定位和固定定位一样,设置这些值,位置就发生偏移,粘性定位不会。这是绝对定位,top、right、bottom、left的参考对象是最近的已定位的祖先元素(即position的值不是static值的元素)如果没有最近已定位的祖先元素,那么就会相对于初始块(通常是body)进行定位。
2025-07-05 14:41:25
223
原创 关于清除浮动—添加伪元素方法
由于这个添加的伪元素清除了左边的浮动,同时它本身的高度有为零,所以他就相当于是在浮动的box盒子的底部边线处,而这个伪元素又是父容器的子元素,父容器在计算高度的时候需要把这个伪元素也包裹在内,也就是把这个浮动的box元素也包裹在内。浮动的元素,父容器在计算高度的时候是不会计算他的高度的,因为浮动的box相当于在这个父容器的上边,父容器看不到它。
2025-06-30 22:27:43
113
原创 Vue2中实例配置对象的methods和computed配置项的区别
你完全正确:计算属性的键值在模板中表现为一个普通属性(实际是缓存值),而方法的键值表现为一个需要调用的函数引用。这是 Vue 框架有意为之的设计,目的是让开发者写出更高效、更清晰的代码。
2025-06-26 11:30:14
239
原创 关于javascript中的原型
prototype所有函数特有的一个属性,这是一个对象属性,对的,只有函数才有这个属性,即使是普通的函数也有,这个对象属性中有一个constructor属性,这个是默认的,它指向这个函数本身。__proto__是所有对象的属性,是的,所有对象,当然也包括函数,他们内部都有这样一个属性,这个属性就指向了他的原型对象,也就是这个实例对象的缔造者身上的prototype属性。js的原型机制中最重要的就是两个属性,__proto__和prototype。
2025-06-23 11:47:35
135
原创 为什么说javascript中的函数是一等公民
JavaScript 中的函数堪称 “超级对象”,它既具备普通对象的特性,又拥有可调用的能力,并且能够参与各种高阶操作。这种特性让 JavaScript 能够实现函数式编程,还能支持像闭包、回调函数、Promise 等强大的功能。
2025-06-18 15:02:14
355
原创 javascript中的Promise()构造方法
实际上,这个Promise构造方法就是用来封装异步操作的,同时保存异步操作之后的数据,这个构造方法始终接收一个回调函数,这个回调函数始终有两个参数,一个是resolve,一个是reject。异步操作的返回数据写到resolve的参数里边,作为resolve的参数保存到promise容器里边,而reject则是处理异步操作不成功时候的返回的提示信息,同样作为reject的参数,
2025-06-08 15:46:49
170
原创 javascript中对象属性名的写法以及访问方式的细节
二.、非合法标识符 就要写成 'first-name' ,'last-name',用双引号也可以。一、 合法表示符 像 firstName, lastName。三、计算属性名,[key]
2025-06-06 11:01:28
148
原创 javascript中字符串类型不可修改(不可修改中间的某个字符但是可以重新赋值)
【代码】javascript中字符串类型不可修改(不可修改中间的某个字符但是可以重新赋值)
2025-06-06 09:55:30
112
原创 多版本Node.js共存管理工具 NVM 下载和使用教程
(Node Version Manager)是一个用于的工具,主要帮助开发者在同一设备上轻松安装、切换和卸载不同版本的Node.js,解决项目间版本冲突问题。
2025-06-03 14:57:14
593
原创 对vue前端框架定位的理解(自学笔记,写的不好的地方还请指教,哈哈哈)
可以这么理解,以前的程序一开始是用汇编语言写的,但是呢,这汇编语言使用起来还是不太容易,于是就有人开发了各种各样的现代编程语言,像 c,java,python。但是,vue强大的地方还不只是这些,如果仅仅是对复杂的 js 操作进行封装,那么这个和 jquery 这种工具库有什么区别呢。vue更方便的在于它的。,让程序员能更方便的使用,而不用再去写那些复杂的DOM操作(命令式的写法),可以直接用vue的声明式的写法更方便。原生的 js 开发是存在一些问题的,简单来说,就是语法太复杂了,不好用。
2025-06-03 13:16:06
284
原创 对javascript表达式的一些理解
avaScript中的表达式涵盖多种形式:1.字面量表达式(数字、字符串、数组等直接量);2.算术表达式(使用运算符计算的值);3.函数调用表达式(执行函数并返回结果);4.对象属性访问表达式(获取属性或方法)。表达式可以是任何数据类型,包括函数,因为它们也是对象类型。通过简单语法即可获得值,是JS编程的基础组成部分。
2025-05-30 10:26:25
167
原创 const关键字
例如:void f (const int i) {......},编译器就会知道 i 是一个常量,不允许修改。即可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。如果在函数体内修改了 i, 编译器就会报错。Max++会产生错误;如果想修改Max的内容,只需把它修改成:const int Max= 新的数值;3. 可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变全变。2. 便于进行类型检查,使编译器对处理内容有更多了解,消除一些隐患。
2024-02-21 11:29:29
608
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅