随笔分类 - JavaScript技术
摘要:1、Promise 的声明 首先呢,promise肯定是一个类,我们就用class来声明。 由于new Promise((resolve, reject)=>{}),所以传入一个参数(函数),秘籍里叫他executor,传入就执行。 executor里面有两个参数,一个叫resolve(成功),一个
阅读全文
摘要:Async/Await 版本 function sleep(delay) { return new Promise(reslove => { setTimeout(reslove, delay) }) } !async function test() { const t1 = +new Date()
阅读全文
摘要:1.单例模式 单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。 适用场景:一个单一对象。比如:弹窗,无论点击多少次,弹窗只应该被创建一次。 class CreateU
阅读全文
摘要:二分查找,也称折半查找。利用二分思想,每次查找的时候把数据分为两半,从中间值开始找。 如上图所示,low和high代表数组的两边下标,mid代表数组的中间下标。 若目标值比中间值大,即目标值在mid与high之间,就修改low的值。再对比中间值。 若目标值比中间值小,即目标值在low与mid之间,就
阅读全文
摘要:中间件的功能和分类 中间件的本质就是一个函数,在收到请求和返回相应的过程中做一些我们想做的事情。Express文档中对它的作用是这么描述的: 执行任何代码。修改请求和响应对象。终结请求-响应循环。调用堆栈中的下一个中间件。 分类 Express文档中把他们分为了五类,但是他们的原理相同,只是用法不同
阅读全文
摘要:模块管理这个概念其实在前几年前端度过了刀耕火种年代之后就一直被提起。 直接回想起来的就是 cmd amd commonJS 这三大模块管理的印象。接下来,我们来详细聊聊。 一、什么是模块化开发 为了让一整个庞大的项目看起来整整齐齐,规规整整而出现的模块化管理,我们常见的三种模块化管理的库: requ
阅读全文
摘要:Promise 出现的原因 在 Promise 出现以前,我们处理一个异步网络请求,大概是这样: // 请求 代表 一个异步网络调用。 // 请求结果 代表网络请求的响应。 请求1(function(请求结果1){ 处理请求结果1 }) 看起来还不错。但是,需求变化了,我们需要根据第一个网络请求的结
阅读全文
摘要:原型 执行代码var o = new Object(); 此时o对象内部会存储一个指针,这个指针指向了Object.prototype,当执行o.toString()等方法(或访问其他属性)时,o会首先查看自身有没有该方法或属性,如果没有的话就沿着内部存储的指针找到Object.prototype对
阅读全文
摘要:apply,call,bind都是js给函数内置的一些api,调用他们可以为函数指定this的执行,同时也可以传参。 call call 接收多个参数,第一个为函数上下文也就是this,后边参数为函数本身的参数。 let obj = { name: "一个" } function allName(f
阅读全文
摘要:对象和数组时 Javascript 中最常用的两种数据结构,由于 JSON 数据格式的普及,二者已经成为 Javascript 语言中特别重要的一部分。 在编码过程中,我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段。 ES6 中添加了可以简化这种任务的新特性:解构。解构是一种打破数据
阅读全文
摘要:1. 箭头函数没有prototype(原型),所以箭头函数本身没有this let a = () =>{}; console.log(a.prototype); // undefined 2. 箭头函数的this指向在定义的时候继承自外层第一个普通函数的this。 下面栗子中在一个函数中定义箭头函数
阅读全文
摘要:插入排序 上图演示了第4次遍历,此时元素1、3、5已经是有序序列,待排的元素是2,要把它插入到1和3之间。此时3和5都往后移动了一位。 可以看出该算法的核心是:如何在有序序列里找到正确的插入位置? 思路是从有序序列的尾部开始,逐个与目标元素比较,如果大于目标元素,该元素需要后移。 代码实现: for
阅读全文
摘要:深拷贝和浅拷贝的主要区别,就是,其在内存中的存储类型不同。 堆和栈都是内存中划分出来用来存储的区域。 栈(stack)为自动分配的内存空间,它由系统自动释放;而堆(heap)则是动态分配的内存,大小不定也不会自动释放。 在将深拷贝和浅拷贝之前,我们先来重新回顾一下 ECMAScript 中的数据类型
阅读全文
摘要:在进行窗口的resize、scroll,输入框内容校验等操作时。如果事件处理函数调用的频率无限制,浏览器的负担会很大,形成卡顿等问题,用户体验会非常糟糕。 此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果! 马上来学习吧! 防抖 函数防抖(
阅读全文
摘要:javascript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线程这一核心仍未改变。所以一切javascript版的"多线程"都是用单线程模拟出来的,一切javascript多线程都是纸老虎! javascript事件循环 js是单线程,那就像只有一
阅读全文
摘要:7项重要储备 Flow 基本语法 发布/订阅模式 ES6+ 语法 原型链、闭包 函数柯里化 event loop 接上讲 聊到了ES6的几个重要语法,加下来到第四点继续开始。 4.原型链、闭包 原型链 继承于我们前端来说绝对是非常熟悉也必须熟悉的一个高频必懂知识点。熟悉到只要是面试一定会有关于继承的
阅读全文
摘要:发布订阅模式,它其实是一种对象间一对多的依赖关系(不是综艺节目以一敌百那种),当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。 作用 广泛应用于异步编程中(替代了传递回调函数) 对象之间松散耦合的编写代码 先从最简单的说起 let corp = {}; // 自定义一个公司对象
阅读全文
摘要:从接下来的一段时间里,Mg要进行阅读源码的工作。再阅读源码前,梳理一下准备工作。 7项重要储备 Flow 基本语法 发布/订阅模式 ES6+ 语法 原型链、闭包 函数柯里化 event loop 1.flow 1.1 什么是flow 没有类型的静态检查是 JavaScript 语言的先天缺失,所有很
阅读全文