自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 问答 (4)
  • 收藏
  • 关注

原创 模板转为js结构的loader

2022-09-09 01:03:09 304 1

原创 虚拟DOM,diff

2022-08-01 12:24:40 542

原创 7.30复盘

复盘

2022-07-31 01:30:37 323

原创 TypeScript

TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。ts的基本类型string number boolean使用 :let a:string='kang'let b:number=1let c:boolean=true使用字面量来标注类型let a: 11 | 12 //联合类型,此时的a只能是11或者12a = 12any 任意类型,any或者没有声明类型的变量都是任意类型let namele

2022-01-02 22:14:26 293

原创 webpack和node 相关

对webpack的了解静态模块打包工具他会在内部构建一个依赖图,这个依赖图反应模块之间的依赖关系,并生成一个或者多个bundle文件(打包生成的文件就是bundle)webpack本身可以解析打包各种符合模块规范的JS代码核心概念:mode 模式(生产模式 开发模式)区别是压不压缩文件entry 入口 打包开始的入口js文件output 出口 在哪输出打包好的bundleloader 加载器 loader让webpack可以用来处理除了js以外的文件格式,因为webpack他只能对于

2021-11-27 19:25:41 1399

原创 计算机网络相关

HTTP状态码304是多好还是少好服务器为了提高网站访问速度,对之前访问的部分页面指定缓存机制,当客户端在此对这些页面进行请求,服务器会根据缓存内容判断页面与之前是否相同,若相同便直接返回304,此时客户端调用缓存内容,不必进行二次下载。状态码304算不上是一种错误,他是在客户端有缓存的情况下,服务器向客户端发出的一种响应304不一定多了好网络爬虫会通过一段时间内网站返回的状态码来判断网页的质量,如果304缓存多了,就会降低蜘蛛对网站的抓取频次。相反,如果网站更新频率快,长此以往,回访率就会多产生3

2021-11-19 00:15:04 1306

原创 Vue、React

Vue双向数据绑定vue是通过数据劫持和发布订阅者模式来实现双向数据绑定的就是利用oberver来监听module数据的变化,通过compile来解析模板,最终通过watcher来建立oberver和module之间的通信桥梁创建一个vue对象,分为el模板和data数据使用Object.definePropertype来劫持data中的每个属性的getter和setter,在数据发生变化的时候发布消息给订阅者,触发相应的回调。(vue3使用proxy劫持数据)也就是observer的功能com

2021-11-14 22:46:27 1035

原创 html相关

src和href的区别都是对外部资源的引用src是用来请求下载资源并应用到当前文档中的(比如请求js脚本),请求到的资源会替换掉当前的这个元素,浏览器解析到这个地方会先暂停对文档的处理,下载完所要请求的资源后再继续处理当前文档(所以一般js脚本会放在最底下)href是超文本引用,他是用来建立当前元素和外部资源的一种联系,通常指向一些网络资源,当浏览器解析到这个地方的时候会并行下载资源,不会暂停对当前文档的处理(比如css资源的引入)对HTML语义化的理解语义化的标签对开发者更加友好,让代码可读

2021-11-12 22:29:49 688 3

原创 css相关

css选择器及权重!important修饰的权重最高行内元素 1000id选择器 100类、伪类、属性选择器 10标签选择器 1通配符、相邻、父子 0可以继承的属性1,字体相关:font-size font-family2,文本 text-align text indent3,鼠标的形态 cursor4,列表的布局 list-styledisplay的属性值及作用none:让元素在文档流中移除block:块级元素,独占一行,可设置宽高,有m,pline:行内元

2021-11-09 22:34:15 591

原创 js的基础

setTimeout不准时怎么办使用web worker,它为js创造了多线程环境,当js主线运行时,worker在后台运行,两者互不干扰,当worker运行出结果后,会把结果交给主线程 // worker 解决方案 let worker = new Worker('worker.js');判断一个变量是null,undefinedundefined:1,var exp = undefined;if (typeof(exp) == "undefined"){ alert(

2021-11-02 18:04:46 708

原创 js 中的== 和===

==在相等运算中,应注意以下几个问题:如果操作数是布尔值,则先转换为数值,其中 false 转为 0,true 转换为 1。如果一个操作数是字符串,另一个操作数是数字,则先尝试把字符串转换为数字。如果一个操作数是字符串,另一个操作数是对象,则先尝试把对象转换为字符串。如果一个操作数是数字,另一个操作数是对象,则先尝试把对象转换为数字。如果两个操作数都是对象,则比较引用地址。如果引用地址相同,则相等;否则不等。NaN与任何值都不相等,包括它自己。null 和 undefined 值相等,但是它.

2021-11-01 21:24:51 152

原创 js垃圾清除机制(标记清楚,引用计数)

内存泄漏不再使用到的内存,没有及时释放,就是内存泄露所以为了避免手动的释放内存,就有了垃圾请除机制代码回收规则如下:1.全局变量不会被回收。2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。3.只要被另外一个作用域所引用就不会被回收 (闭包中引用的变量不会被回收)垃圾回收的方法1,标记清除垃圾回收器会给在内存中的变量都做上标记,然后它会去除在环境中的变量和被环境中变量引用的变量(闭包)的标记,在这之后的被标记的变量就是需要清除的变量了。之后垃圾回收器将会回收这些变量

2021-11-01 20:56:14 2658 2

原创 js手写题

1,函数防抖和函数节流防抖和节流都是处理处理频繁调用的函数时的一个优化函数防抖在规定是一段时间内,只执行最后一次的函数调用,前面的不生效场景:在搜索框发请求时,避免用户打字幅度较快而发送太多没有必要的请求function debounce(func, wait) { var timer = null return function () { var ctx = this var args = arguments

2021-11-01 19:47:39 933

原创 js二分查找

二分查找就是在一个有序数组里,找到目标数,具体做法是:1,找到有序数组中的最终关键的数 2,用中间数跟目标数比较,如果目标数比中间数大,则在中间的右侧序列继续进行以上步骤,直到找到这个目标数;如果目标数比中间数小,则在中间的左侧序列继续进行以上步骤,直到找到这个目标数(用递归实现) function binarySearch(arr, left, right, findVal) { if (left > right) { return -1

2021-10-31 21:30:46 73

原创 js排序算法

以从小到大顺序排列为例1,快速排序思想(分治):先在数组中选取一个基准数,然后将小于这个基准的数放在基准左边,将大于基准的数放在右边,这时这个基准的位置就是他最终应该在的位置,然后对于左边的序列和右边的序列继续进行以上操作(递归),最终的得到排序好的序列 function quickSort(arr) { if (arr.length < 1) return arr var index = Math.floor(arr.length /

2021-10-31 00:43:52 57

原创 在js中 var let const 的区别

一,var用var声明的变量是函数作用域(在函数内部声明的变量只能在函数作用域内部使用,在函数外部不能访问。但是,在函数内部可以访问函数外部的全局作用域中的变量。)var声明的变量会有变量提升(在var 之前就可以使用,未赋值时是undefined)全局作用域中的var声明的变量是挂载在全局对象windows上在同一作用域下,var可以声明相同名字的变量二, let用let声明的变量是块级作用域下的(块级作用域是用{}来界定的,块与块之间不能访问变量)用let声明的变量没有变量提升(也就

2021-10-28 23:47:38 114

原创 js 事件冒泡_事件捕获_事件委托

事件流事件流描述的是从页面中接收事件的顺序,有两种:事件冒泡和事件捕获事件冒泡事件由最具体的元素向上传播到不具体的元素取消冒泡:1,W3C标准 event.stopPropagation()2,IE谷歌: event.cancelBubble = true;事件捕获事件捕获与事件冒泡正好相反,是从最顶层向下传递的,(从最不具体的元素到最具体的元素传播可以自己选择绑定事件时采用事件捕获还是事件冒泡,方法就是绑定事件时通过addEventListener函数,它有三个参数,第三个参数若是t

2021-10-28 23:06:01 150

原创 js基本类型和引用类型

1,基本类型Number ,String,Boolean,Undefined,Null2,引用类型Object, Array,Function,Date3,两者的区别1,内存分配方式不同基本类型存储在栈的数据段中,因为他们占据的空间是固定的,也方便迅速查询变量的值引用类型存储在堆中,变量是引用了他的指针来进行访问,因为他们的值的大小会改变,所以分配在堆中2,两种类型在添加属性时候的区别引用类型可以动态的给添加属性基本类型的值是不可变(值不可变比如说)var name = 'jozo'

2021-10-28 21:54:48 91

原创 js执行过程

js的执行过程?javascript是由浏览器解释执行的脚本语言,js执行过程分为预编译期和执行期(以代码块为单位,边解释边执行),在预编译的时候,会有这几个步骤创建执行上下文找形参和变量的声明,值赋为undefined统一形参和实参找到函数声明,赋予函数体例: function fn(a) { console.log(a); //fa(){} var a = 123; console.log(a); //123

2021-10-28 20:15:27 168

原创 javascript闭包

什么是闭包?「函数」和「函数内部能访问到的变量」的总和,就是一个闭包。闭包是 JS 函数作用域的副产品。换句话说,正是由于 JS 的函数内部可以使用函数外部的变量,才有了闭包。比如:这里local和bar就形成了一个闭包function foo(){ var local = 1 function bar(){ local++ return local } return bar}var func = foo()func()闭包的特点?①函数嵌套函数(函数套函

2021-10-28 18:04:46 105

原创 js的六种继承方式

js一共有六种继承方式父类: function Person(name) { this.name = name } Person.prototype.age = 181,原型链继承就是让子类的原型等于父类的实例对象这样继承的子类的实例共享了父类实例上的方法,当一个子类实例修改了父类实例的属性,其他子类实例的属性就会发生变化不能实现多继承构造实例的时候不能向父类的构造函数传递参数 // 1,原型链继承 function Person

2021-10-27 21:46:06 209

原创 js中的this指向问题

this指向函数执行的上下文,即谁调用函数,this就指向谁在方法中,this指向调用他的对象在全局作用域下单独使用,this指向全局对象window在函数中,this指向全局对象window严格模式下的函数中,this指向undefined在事件中,this指向接收事件的DOM对象(但是直接在DOM标签中写事件,this指向window)箭头函数的this会指向函数定义时所在的对象,默认使用父级的this var a = 1; function printA() {

2021-10-26 22:28:43 89

原创 JS事件循环

一,什么是事件循环javascript是单线程的脚本语言,一般情况下代码是同步执行的,所以js引擎遇到一个异步事件后并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务。当这个异步事件返回结果后,js会将这个事件加入到任务队列中等待被执行。任务又分为宏任务和微任务。宏任务:setTimeout,setInterval微任务:Promise Promise,process.nextTick当前执行栈执行完毕时,主线程会查看微任务队列有没有事件等待执行,如果有就将其压入执行栈中执

2021-10-25 23:35:45 136

原创 ES6 Promise

一,Promise到底是个啥?promise是一个构造函数,它用来封装异步操作,可以有效解决回调地狱问题以下使用promise封装ajax请求 var btn = document.getElementById('btn') btn.onclick = function () { const p = new Promise((resolve, reject) => { // 创建对象 const xhr = new

2021-10-25 22:34:19 113

原创 webpack生产环境的配置

const { resolve } = require("path");const MiniCssExtractPlugin = require('mini-css-extract-plugin')const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')const HtmlWebpackPlugin = require('html-webpack-plugin')//定义nodejs环

2021-04-26 21:40:53 76

原创 webpack开发环境的配置

文件目录:代码://开发环境的配置:能让代码运行即可//运行指令:webpack 会将打包结果输出出去// npx webpack serve 只会在内存中编译打包,没有输出const HtmlWebpackPlugin = require('html-webpack-plugin')const { options } = require('less')const { resolve } = require('path')module.exports = { ent

2021-04-19 18:48:48 78

原创 react-Difff算法的概念

react-Difff算法的概念Diff (different)tree diff :新旧两棵DOM树,逐层对比的过程。当整棵DOM树逐层对比完毕,则所有需要更新的元素必然能够找到。component diff:(component:组件)在进行tree diff 的时候,每一层中组件级别的对比。如果对比前后组件类型相同,则暂时认为此组件不需要被更新,如果对比前后组件类型不相同。则需要移除旧组件,创建新组件,并追加到页面上。element diff:在进行组件对比的时候,如果两个组件类型相同,

2021-03-08 17:17:36 250

原创 react-虚拟DOM的本质和目的

虚拟DOM的本质和目的虚拟DOM(Virtual Document Object Model)DOM是什么?浏览器中的概念,用JS对象来表示页面上的元素,并提供了操作DOM对象的API;什么是react中的虚拟DOM?是框架中的概念,是程序员用JS 对象来模拟页面上的DOM和DOM嵌套;虚拟DOM的目的是什么?为了实现按页面中DOM元素的高效更新;DOM和虚拟DOM的区别:1,虚拟DOM不会进行排版与重绘操作2,虚拟DOM进行频繁修改,然后一次性比较并修改真实DOM中需要改的部分(注意

2021-03-07 23:03:02 201

原创 linux终端-基本概念及操作

1,重要快捷键[Tab]使用Tab键可以补全命令,补全目录,补全命令参数[Ctrl+c]强行终止当前程序其他常用快捷键:2,历史输入命令可以翻看之前输入的命令3,通配符通配符是一种特殊语句,用来对字符串进行模糊匹配(比如文件名,参数名),当查找文件夹时可以使用它来代替一个或多个真正字符。如:Shell常用通配符例:创建‘hello_1_world’,‘hello_2_world’,‘hello_3_world’…‘hello_10_world’时,可以:4,在命令行

2021-03-03 20:20:47 152 1

原创 操作系统01-什么是操作系统?

操作系统是计算机和应用之间的一层软件他方便我们使用硬件,如使用显存…可以高效的使用硬件,如开多个终端(窗口)管理哪写硬件?CPU管理内存管理终端管理磁盘管理文件管理网络管理电源管理多核管理...

2021-03-03 19:44:24 76

原创 C语言 排序算法(冒泡,选择,插入)

排序算法(冒泡,选择,插入)C语言实现一 ,冒泡排序1,算法思想:它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有在交换的数据,也就是说该数列已经排序完成。二,选择排序1,算法思想一开始从原始序列中找到最小的元素,放到序列地起始位置作为已排序序列;然后,在剩下的未排序地元素中继续寻找最小元素,放到已排序地序列的末尾…直到所有元素排列完毕。三,插入排序1,算法思想在要排序的一组数据中,假设前n-1个数已经排好序,现在

2020-12-16 20:16:22 288

原创 C语言 变量及其作用域,参数传递,递归函数

C语言 变量及其作用域,参数传递,递归函数变量及其作用域

2020-12-16 19:59:47 177

原创 C语言 数据结构 图的储存、遍历、简单应用

C语言 数据结构 图的储存、遍历、简单应用内容:1,创建图(邻接矩阵和邻接链表两种方法)2,图的深度和广度优先搜索结果3,判断图是否为连通图#include<stdio.h>#include<stdlib.h>#include<string.h>#define MVNum 100 //最大顶点数#define MAXSIZE 100typedef char VerTexType; //设顶点的数据类型为字符型 typedef in

2020-12-14 19:01:05 779

原创 JavaScript数据结构 ---- 优先级队列

优先级队列特点每个元素不再只是一个数据,而且包含数据的优先级在添加方式中,根据优先级放入正确的位置封装优先级队列 function PriorityQueue() { function QueueElement(element, priority) { this.element = element; this.priority = priority; } /

2020-11-30 20:38:28 80

原创 JavaScript 数据结构----队列

一,队列概念和结构队列是一种先进先出(FIFO)的数据结构。队列的第一个元素所在位置称为队头,最后一个元素所在位置称为队尾。不包含任何元素的队列称为空队列。队列基本操作enqueue(element):向队列尾部添加一个新的项dequeue():出队,移除队列的第一项,并返回被移除的元素front():返回队列中第一个元素(不移除元素,只返回信息)isEmpty():(empty:空的)队列为空,返回true,否则返回flasesize():返回队列包含的元素个数,与数组的leng

2020-11-30 20:33:28 76

原创 JavaScript 数据结构 --- 栈

JavaScript 数据结构 — 栈一,栈的基本操作1,push(elemenet):压栈,添加一个新元素到栈顶位置2,pop():出栈,移除栈顶元素,同时返回被移除的元素3, peek():返回栈顶元素,不对栈做任何修改(这个方法不会移除栈顶元素,仅仅返回它)4,isEmpty():(empty:空的)栈为空,返回true,栈不为空,返回false5,size():返回栈里元素个数,与数组中的length方法类似6,toString():将栈结构的内容以字符串的形式返回二,封装栈 fu

2020-11-30 20:24:58 68

原创 ES6 set和map数据结构(数据结构之间的转换)

一、set1,基本用法ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。 var s = new Set(); var arr = [1, 2, 2, 2, 3, 4, 5, 6, 6]; arr.map(x => s.add(x)); console.log(s); //1,2,3,4,5,6以上代码通过add方法向s中添加成员,结果表示Set

2020-11-26 20:27:49 364 1

原创 ES6 对象的扩展、Symbol

ES6 对象的扩展、Symbol一、对象的扩展1、 属性的简洁表示法ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。var some='aaa';var obj={some};console.log(obj); //{some:aaa}//等同于 var obj={some:some}//只写属性名,不写属性值。这时,属性值等于属性名所代表的变量除了属性简写,方法也可以简写。var obj={ func(){ return 'hi!'

2020-11-04 23:10:28 152 2

原创 ES6 函数的扩展

ES6 函数的扩展一,函数参数的默认值ES6允许为函数的参数设置默认值,即直接写在参数定义的后面。 function log(x, y = 'world') { console.log(x + ' ' + y); } log('hello', 'hello'); //hello hello log('hello'); //hello world log('hello',); //hello wo

2020-10-25 15:05:46 113

原创 ES6 数值的扩展、数组的扩展

ES6 数值的扩展、数组的扩展一、数值的扩展1,二进制和八进制的表示ES6提供了二进制和八进制数值的新的写法二进制前缀:0b、0B八进制前缀:0o、0O2,Number.isFinite() 和 Number.isNaN() 方法Number.isFinite() 用来检验一个数值是否非无穷(infinite)。例: //infinite 极大的 无法测量的 无穷 console.log(Number.isFinite(5)); //true

2020-10-18 12:10:22 173

空空如也

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

TA关注的人

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