随笔分类 - JavaScript高级
摘要:<script> // 类EventBus -> 事件总线对象 class HYEventBus { constructor() { this.eventMap = {} } on(eventName, eventFn) { let eventFns = this.eventMap[eventNam
阅读全文
摘要:<script src="./js/isObject.js"></script> <script> // // 封装判断是否是对象类型 // function isObject(value){ // const valueType = typeof value // return (value !=
阅读全文
摘要:<script> const info ={ name:"hdc", age:21, friends:{ name:"kobe" } } //1.引用赋值 const obj1 = info // 2.操作二:浅拷贝 const obj2 = {...info} //obj2.name = "jam
阅读全文
摘要://1. // let a = 1 // function b(a){ // a =2 // console.log(a)//2 // } // b(a) // console.log(a)//1 //2. // function a(b=c,c=1){ // console.log(b,c)//报
阅读全文
摘要:<button class="btn">按钮</button> <!-- <script src="./js/underscore.js"></script> --> <script> function hdcthrottle(fn,time){ //获取开始时间 let startTime = 0
阅读全文
摘要:认识节流throttle函数 ◼ 我们用一副图来理解一下节流的过程 当事件触发时,会执行这个事件的响应函数; 如果这个事件会被频繁触发,那么节流函数会按照一定的频率来执行函数; 不管在这个中间有多少次触发这个事件,执行函数的频繁总是固定的; 节流的应用场景: ➢ 监听页面的滚动事件; ➢ 鼠标
阅读全文
摘要:<button>按钮</button> <input type="text"> <!-- 本地引入:下载js文件并且本地引入 --> <!-- <script src="./js/underscore.js"></script> --> <script> /* 自己实现函数需要做的事情 1.需要接收
阅读全文
摘要:防抖函数和节流函数 认识防抖debounce函数 ◼ 我们用一副图来理解一下它的过程: 当事件触发时,相应的函数并不会立即触发,而是会等待一定的时间; 当事件密集触发时,函数的触发会被频繁的推迟; 只有等待了一段时间也没有事件触发,才会真正的执行响应函数; 防抖的应用场景很多: ➢输入框中频繁
阅读全文
摘要:// 封装工具函数:格式化时间 function formatTime(timestamp,fmtString){ //1.将时间戳转成date const date = new Date(timestamp) // // 获取具体时间 // //获取年 // const year = date.g
阅读全文
摘要:/* currentTime: 2000 [00:00.000] 作词 : 许嵩 -> { time: 0, content: "作词 : 许嵩" } [00:01.000] 作曲 : 许嵩 -> { time: 1000, content: "作曲 : 许嵩" } [00:02.000] 编曲 :
阅读全文
摘要:什么是正则表达式? ◼ 我们先来看一下维基百科对正则表达式的解释: 正则表达式(英语:Regular Expression,常简写为regex、regexp或RE),又称正则表示式、正则表示法、规则表达式、常规表示法,是计算机科学的一个概念; 正则表达式使用单个字符串来描述、匹配一系列匹配某个句
阅读全文
摘要:认识Storage ◼ WebStorage主要提供了一种机制,可以让浏览器提供一种比cookie更直观的key、value存储方式: cookie:服务器返回自动返回一个cooki,浏览器将cookie存储到本地,浏览器再发送请求自动把cooki传递过去 localStorage:本地存储,提
阅读全文
摘要:function foo(x,y,z){ console.log(x+y+z) } function webKingCurrying(fn){ function curryFn(...args){ // >这里的...args是剩余参数 //两类操作: //1.第一类操作:继续返回一个新的函数,继续
阅读全文
摘要:错误处理方案 ◼ 开发中我们会封装一些工具函数,封装之后给别人使用: 在其他人使用的过程中,可能会传递一些参数; 对于函数来说,需要对这些参数进行验证,否则可能得到的是我们不想要的结果; ◼ 很多时候我们可能验证到不是希望得到的参数时,就会直接return: 但是return存在很大的弊端:调
阅读全文
摘要:面试题一 /* promise1 2 then1 queueMicrotask1 then3 setTimeout1 then2 then4 setTimeout2 */ console.log("script start")//主任务1 setTimeout(function () { conso
阅读全文
摘要:进程和线程 ◼ 线程和进程是操作系统中的两个概念: 进程(process):计算机已经运行的程序,是操作系统管理程序的一种方式; 线程(thread):操作系统能够运行运算调度的最小单位,通常情况下它被包含在进程中; ◼ 听起来很抽象,这里还是给出我的解释: 进程:我们可以认为,启动一个应用程
阅读全文
摘要:◼ async关键字用于声明一个异步函数: async是asynchronous单词的缩写,异步、非同步; sync是synchronous单词的缩写,同步、同时; ◼ async异步函数可以有很多中写法 async function foo(){} const foo1 = async fun
阅读全文
摘要:自动执行generator函数 ◼ 目前我们的写法有两个问题: 第一,我们不能确定到底需要调用几层的Promise关系; 第二,如果还有其他需要这样执行的函数,我们应该如何操作呢? ◼ 所以,我们可以封装一个工具函数execGenerator自动执行生成器函数 <script> // 封装一个请
阅读全文
摘要:异步处理方案 ◼ 学完了我们前面的Promise、生成器等,我们目前来看一下异步代码的最终处理方案。 ◼ 案例需求: 我们需要向服务器发送网络请求获取数据,一共需要发送三次请求; 第二次的请求url依赖于第一次的结果; 第三次的请求url依赖于第二次的结果; 依次类推; <script> /
阅读全文
摘要:◼ 生成器是ES6中新增的一种函数控制、使用的方案,它可以让我们更加灵活的控制函数什么时候继续执行、暂停执行等。 平时我们会编写很多的函数,这些函数终止的条件通常是返回值或者发生了异常。 ◼ 生成器函数也是一个函数,但是和普通的函数有一些区别: 首先,生成器函数需要在function的后面加一个
阅读全文