随笔分类 - js
摘要:弹窗从鼠标点击位置弹起 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="vi
阅读全文
摘要:描述 普通script标签会阻塞dom解析,致浏览器必须加载并且执行脚本,之后才能继续解析,一些耗时操作会让页面出现白屏,而defer属性和async属性能够消除解析阻塞,并行请求脚本。 差异 存在async属性的脚本会并行请求,并尽快解析和执行,不保证顺序; 存在defer属性的脚本会阻塞DOMC
阅读全文
摘要:window.__POWERED_BY_QIANKUN__ = true; let module = null; export const registerMicroApps = (apps = []) => { const _pushState = history.pushState; histo
阅读全文
摘要:传统方式 监听 scroll 事件,调用指定元素 getBoundingClientRect 方法,再判断元素是否在视口内;如果是嵌套滚动,则需要多级监听,多级判断,计算量很大,可能影响性能。 (function () { const target = document.querySelector(
阅读全文
摘要:前置知识 对象:location、history ; 事件:popstate、hashchange 作为前端路由,路由操作一定不能刷新页面,这一点很重要! hash 路由 原理 修改 location.hash 值(页面不会刷新),如果修改前后值不一致,则往 history 中增加一条记录;当 ha
阅读全文
摘要:手写代码 function Promise(executor) { const self = this; self.state = 'pending'; self.data = undefined; self.resolvedCb = []; self.rejectedCb = []; functi
阅读全文
摘要:根据我的个人理解,与实际有偏差 术语 Promise 是一个拥有 then 方法的对象或函数; thenable 是一个定义了 then 方法的对象或函数; value 指任何 JavaScript 的合法值(包括 undefined , thenable 和 promise); exception
阅读全文
摘要:Generator 生成器函数,返回一个迭代器对象,可以手动调用 next 方法来控制执行,throw 方法抛出错误,return 方法来提前结束,也可以使用 for...of 自动遍历遍历。 function* gen() { yield 1; yield 2; yield 3; } let g
阅读全文
摘要:首先这就是一个 bug,是第一版 javascript 遗留下来的。在这个版本,数值是以 32 字节存储的,由标志位(1~3 个字节)和数值组成。标志位存储的是低位的数据。 有五种标志位: 000:对象,数据是对象的应用。 1:整型,数据是 31 位带符号整数。 010:双精度类型,数据是双精度数字
阅读全文
摘要:意义 首先 javascript 是单线程脚本语言,至于为什么是单线程?最初设计的时候是执行浏览器脚本,单线程能保证对 DOM 操作的准确性。但这就意味着在处理较耗时操作时会阻塞,比如:I/O 操作,网络请求等。为了避免这种情况,耗时操作可以异步任务中执行,执行完成后通知相应的回调,事件循环就诞生了
阅读全文
摘要:问题 以下代码执行结果是? Promise.resolve({ then: function () { console.log('a'); } }).then(() => { console.log('d'); }); 首先第一直觉就是打印 d,当结果却是 a。立马去翻了 MDN ,果然发现了一些细
阅读全文
摘要:防抖 高频操作,最后一次生效。 function debounce(fn) { let timer = null; return (...args) => { clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, args);
阅读全文
摘要:定义 将接收多个参数的函数转换成接收单一参数的函数,并且返回一个接收余下的参数的新函数。 应用场景 参数重复 // 柯里化 前 function validate(rule, value) { console.log('rule :>> ', rule); console.log('value :>
阅读全文
摘要:/** * @description: 深拷贝 * @param { any } source 数据源 * @param { Map } cache 缓存(不传,有默认值) * @return { any } 复制值 */ function deepCopy(source, cache = new
阅读全文
摘要:为什么要管理内存 减少浏览器卡顿; 防止node端服务中断; 变量如何保存在内存中 普通类型(字符串,数字、布尔等)数据保存在栈内存中; 引用类型(对象,数组,方法等)数据保存在堆内存中,栈内存保存堆内存地址; V8 占用内存大小 64位1.4G; 32位700MB; 根据不同浏览器有些许扩容;no
阅读全文