![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
js
文章平均质量分 59
小蛮牧码者
这个作者很懒,什么都没留下…
展开
-
tapable最详细源码分析及手写实现
tapable整体介绍tapable 是一个类似于 Node.js 中的 EventEmitter的库,但更专注于自定义事件的触发和处理。const { SyncHook, SyncBailHook, SyncWaterfallHook, SyncLoopHook, AsyncParallelHook, AsyncParallelBailHook, AsyncSeriesHook, AsyncSeriesBailHook, AsyncSeriesWaterfallHook, Asyn原创 2022-04-12 15:11:53 · 972 阅读 · 2 评论 -
V8 Promise源码全面解读
阅读本文你将收获什么?了解 V8 Promise 源码全过程,世界上不再有能困住你的 Promise 题目,我就是这么肯定这篇文章的干货仅仅了解或者实现了 Promise/A+ 规范,这与 JavaScript 的 Promise 中间还有很大的差距如果你在面试时将 Promise 回答到本文的深度,一定是收获 SP 或者 SSP offer 的利器,因为面试官大概率也不知道这些知识。你知道 浏览器 & Node 中真正的 Promise 执行顺序是怎么样的吗,如果你只是看过 Promise转载 2022-03-21 11:15:22 · 482 阅读 · 0 评论 -
记录webpack的source map使用详细说明
common.jsexport const show = () => { debugger document.write('hello webpack 11')}没有使用source-map,看一下调试效果:evaldevtool: 'eval'调试效果:eval - 每个模块都使用 eval() 执行,并且都有 //@ sourceURL。此选项会非常快地构建。主要缺点是,由于会映射到转换后的代码,而不是映射到原始代码(没有从 loader 中获取 source原创 2022-03-14 17:49:28 · 1964 阅读 · 0 评论 -
webpack中hash、chunkHash、contentHash的区别
webpack中hash、chunkHash、contentHash的区别hashHash:和整个项⽬的构建相关,只要项⽬⽂件有修改,整个项⽬构建的hash值就会更改。这样会导致缓存失效。项目中的文件只要有一个文件改变,那么整个项目文件的hash都会改变。chunkhashchunkhash:和webpack 打包的chunk 有关,不同的entry 会⽣成不同的chunkhash值只有在改变某个chunk的文件时,才会生成对应的hash。比如我改变了index依赖的base.less文件构原创 2022-03-10 15:56:31 · 1083 阅读 · 0 评论 -
详细记录如何在跨域请求中携带cookie
1. 搭建环境1.生成工程文件npm init 2.安装 expressnpm i express --save 3.新增app1.js,开启服务器3001const express = require('express')const app = express()const port = 3001// 设置`cookie`app.get("/login", (req, res) => { res.cookie("JESSIONID", "10101001", {原创 2022-02-28 17:37:06 · 5195 阅读 · 6 评论 -
箭头函数特殊性与普通函数的区别
参考:https://juejin.cn/post/7050492355056664612箭头函数没有[[Construct]]函数对象是一个支持[[Call]] 、 [[Construct]]内部方法的对象。每个支持[[Construct]]的对象必须支持[[Call]],也就是说,每个构造函数必须是一个函数对象。因此,构造函数也可以成为构造函数函数或构造函数对象。所以,想要对某个对象使用new,就得确保该对象具有 [[Construct]]这个内部方法。而箭头函数没有 [[Construct]]原创 2022-02-24 17:24:33 · 348 阅读 · 0 评论 -
将数组按指定大小分组
使用Array.from()创建新的数组, 这符合将生成的区块数。使用Array.slice()将新数组的每个元素映射到size长度的区块。如果原始数组不能均匀拆分, 则最终的块将包含剩余的元素。let chunk = (arr, size) => Array.from({ length: Math.ceil(arr.length / size)}, (v, i) => arr.slice(i * size, i * size + size));let arr = [1, 2, 3原创 2022-02-16 09:16:50 · 621 阅读 · 0 评论 -
Object.create()与new的具体实现与区别
Object.create与new区别function A() { this.name = 'abc';}A.prototype.a = 'a';A.prototype.showName = function () { return this.name;}var a1 = new A();var a2 = Object.create(A.prototype);从这个例子可以看出,a2只继承了A原型的属性和方法,a1 是构造函数 A 的实例,继承了构造函数 A 的属性原创 2022-02-14 10:57:16 · 1018 阅读 · 0 评论 -
Vite与webpack优势
Vite: 快缓存:依赖库缓存http缓存:源码协商缓存、模块强缓存esbuild: go语言 速度比webpack快10-100倍按需编译源码webpack 原生js编写的,性能不如go语言。原创 2022-01-06 11:26:36 · 708 阅读 · 0 评论 -
MutationObserver详解
MutationObserver用来监视 DOM 变动。DOM 的任何变动,比如节点的增减、属性的变动、文本内容的变动都会触发MutationObserver事件。但是,它与事件有一个本质不同:事件是同步触发,也就是说,DOM 的变动立刻会触发相应的事件;Mutation Observer 则是异步触发,DOM 的变动并不会马上触发,而是要等到当前所有 DOM 操作都结束才触发。Mutation Observer 有以下特点:它等待所有脚本任务完成后,才会运行(即异步触发方式)。它把 DOM 变动原创 2021-12-17 10:29:23 · 36220 阅读 · 1 评论 -
判断是否是数组的方法
var _isArray = void 0; if (Array.isArray) { _isArray = Array.isArray; } else { _isArray = function (x) { return Object.prototype.toString.call(x) === '[object Array]'; }; }原创 2021-12-15 14:45:11 · 541 阅读 · 0 评论 -
详解void 0与undefined区别
在学习js库或者框架的时候,发现很多地方用到了void 0,就细心研究了一下。void 运算符对给定的表达式进行求值,然后返回 undefined。void 运算符通常只用于获取 undefined的原始值,一般使用void(0)(等同于void 0)。在上述情况中,也可以使用全局变量undefined 来代替。—摘自 MDN换句话说 void 0和undefined是等价的。如下:volid 后面的不能跟未声明的变量,否则会报错。void+xxx都是undefined,那么为什么一些工具原创 2021-12-15 14:41:11 · 981 阅读 · 0 评论 -
原型与原型链
原型 原型链 js原创 2021-12-09 16:56:32 · 274 阅读 · 0 评论 -
this全面理解
this 理解原创 2021-12-08 15:41:20 · 241 阅读 · 0 评论 -
new调用函数,new具体做了什么?
new具体做了什么原创 2021-12-08 13:57:15 · 261 阅读 · 0 评论 -
Promise、Promise.all和Promise.race实现
Promise.allPromise.prototype.all = function(promises) { let results = []; let promiseCount = 0; let promisesLength = promises.length; return new Promise(function(resolve, reject) { for (let val of promises) { Promise.resolve(val).then(fu原创 2020-12-31 19:23:42 · 88 阅读 · 0 评论 -
找出数组中最大值的几种方法
let arr = [1, 4, 9, 12, 8];1. sort() 排序 a-b(从小到大), b-a(从大到小)let max = arr.sort((a, b) => {return b - a;})[0];2. Math.max()let max = Math.max.apply(null, arr);3. …扩展运算符let max = Math.max(...arr);4. 假设法let max = arr[0];arr.forEach(item => {原创 2020-12-28 15:56:55 · 1789 阅读 · 0 评论 -
防抖与节流实现
函数防抖规定间隔不超过n毫秒的连续调用内只有一次调用生效。function debounce(func, wait) { let timeId; return function(...args) { let _this = this; clearTimeout(timeId); timeId = setTimeout(function() { func.apply(_this, args); }, wait转载 2020-12-25 11:24:34 · 60 阅读 · 0 评论 -
cookie与session
cookie指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。简单点来说就是:浏览器缓存。cookie由什么组成?Cookie的形式: Cookie是由name=value形式成对存在的,Cookie字符串必须以分号作为结束符,Cookie除了name属性之外还存在其他4个相关属性。 设置Cookie的语法如下: set-Cookie:name=value;[expires=date];[path=dir];[domain=domainn];[secu原创 2020-12-10 16:01:53 · 148 阅读 · 1 评论 -
js实现千分位分割
方法一:function toThousands(num) { let [integer, decimal] = String.prototype.split.call(num, '.'); integer = (integer || 0).toString(); let result = ''; while (integer.length > 3) { result = ',' + integer.slice(-3) + result;原创 2020-12-10 14:26:40 · 749 阅读 · 0 评论 -
instanceof封装
instanceof封装function instanceof(L, R) { let O = R.prototype; L = L.__proto__; while (true) { if (L === null) { return false; } if (O === L) { return true; } L = L.__proto__; }}原创 2020-11-06 13:57:35 · 310 阅读 · 0 评论 -
前端排序算法
排序算法冒泡排序从运行时间来看,冒泡排序是最差的一个,冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交互位置,元素项向上移动至正确的顺序,就像气泡升至表面一样。他的复杂度是O(n^2)。function bubbleSort(arr) { let length = arr.length; for (let i = 0; i < length; i++) { for (let j = 0; j < length -1 -i; j++) { if (arr[j] >原创 2020-11-04 10:40:04 · 91 阅读 · 0 评论 -
JSONP的优缺点
1.优点1.1它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制,JSONP可以跨越同源策略;1.2它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持1.3在请求完毕后可以通过调用callback的方式回传结果。将回调方法的权限给了调用方。这个就相当于将controller层和view层终于分开了。我提供的jsonp服务只提供纯服务的数据,至于提供服务以 后的页面渲染和后续view操作都由调用者来自己定义就好了。如果有两转载 2020-11-02 14:44:59 · 898 阅读 · 0 评论