generator用法实现以及async-await什么是generator在 JavaScript 中,Generator 是一种特殊的函数,它可以产生多个值的序列。Generator 函数使用 function* 声明,并通过 yield 关键字 来定义每个值的生成步骤。
Generator 函数可以被看作是一个状态机,它可以在每次调用 next() 方法时暂停和恢复执行。每次调用 next() 方法时,Generator 函数会执行到下一个 yield 关键字处,并将 yield 后面的值作为结果返回。当再次调用 next() 方法时,Generator 函数会从上次暂停的位置继续执行,直到遇到下一个 yield 关键字或函数结束。
12345678910111213141516function* gen() { let a = yield 1 // js执行是先走等号右边的,遇到yield就停止了 console.log('a',a) let b = yield 2 console.log('b',b) let c = ...
从零开始实现一个符合A+规范的PromisePromise是什么,解决了什么问题?Promise是一种用于异步编程的JavaScript对象。主要用于处理异步操作 的结果。
异步导致的问题:回调地狱(让代码难以阅读)、错误处理(无法统一处理错误)、多个异步操作(同步结果困难)
Promise可以使用.then() 方法链式处理异步逻辑
Promise可以使用catch().方法处理异步操作失败的情况
Promise提供.all()、.race()方法支持处理多个Promise对象的结果
开始实现一个符合A+规范的Promise最基础的版本我们平常使用Promise时的用法通常是这样的
123456789101112const p1 = new Promise((resolve,reject)=> { // todo... resolve('成功') // reject('失败') // throw new Error('error')})p1.then(value => { ...
JavaScript中的高阶函数(Higher-Order Functions)什么是高阶函数是指能够接受一个或多个函数 作为参数,并/或者返回一个新函数的函数。
具体来说,高阶函数具备以下两个特点之一或两者兼具:
接受函数作为参数:高阶函数可以接受一个或多个函数作为参数,这些函数可以在高阶函数内部被调用、处理或者组合,以实现特定的功能。
1234567891011function higherOrderFunction(callback) { // todo... callback();}function callbackFunction() { console.log('这是回调函数');}higherOrderFunction(callbackFunction); // 输出:这是回调函数
返回一个新函数:高阶函数可以根据内部逻辑动态地生成并返回一个新的函数,该函数可以在其他地方被调用和使用。
1234567891011121314function createGreeter(greeting) { ...
生成hexo底部自定义小徽章1.什么是徽章徽章是一种小巧精美的小图标,一般配有相关文字进行辅助说明,富有表现力,本质是一种 svg格式的矢量图标
2.如何生成自定义徽章标题/内容/颜色/链接shields.io提供了添加自定义徽标的功能,通过修改如下URL即可获取自定义徽标图片:
1https://img.shields.io/badge/{徽标标题}-{徽标内容}-{徽标颜色}.svg
{徽标标题}:徽标左半部分的文本(短线:—,下划线:_,空格: 或);
{徽标内容}:徽标右半部分的文本,同上;
{徽标颜色}:徽标右半部分背景颜色,可以是 red、green、blue 等颜色英文单词,也可以直接写十六进制的颜色值,如 ff69b4
将其中的 {徽标标题}、{徽标内容}、{徽标颜色} 分别替换为需要的内容即可:
1
做出如下代码和效果如下:
附加参数可以在徽标图片 URL 后面带上一些参数来控制徽标的样式,这 ...
博客更新已经优化清单
[x] CDN加速 多吉云加速ing
[x] 添加Algolia搜索
[ ] 文章详情模块随背景图改变颜色
[ ] 支持文章隐藏功能
[x] 接入Twikoo评论模块
[x] 留言板和追番页配置
[ ] 底部备案号
[ ] 如何引入第三方图标
[x] Twikoo评论模块私有化部署 已采用 mongoDB cloud + Vercel 部署
[x] 部署后使用7bu图床上传评论图片
[x] 引入Vue+Element样式弹窗
[x] 添加昼夜切换效果
[x] hexo-history-calendar 历史上的今天插件
搜索相关文章:Hexo Butterfly Algolia 搜索的使用
评论相关文章:Hexo中Twikoo评论系统配置教程 Butterfly 安装文档(四) 主题配置-2
遗留问题
[x] 自动化博客部署
部署Twikoo评论系统及其邮件推送(Vercel)
全自动部署文章参考
使用Github Action实现全自动部署hexo博客工作流CI(一键部署的快乐github action 持续集成部署 web 应用Hexo ...
浏览器工作原理
浏览器(也称为网络浏览器或互联网浏览器)是安装在我们设备商的软件应用程序,使我们能够访问万维网。在阅读这篇文字时,你实际上正在使用一个浏览器
有许多浏览器正在被使用,截止2022年,使用最多的是:谷歌浏览器,苹果的Safari,微软的Edge和火狐。
但是,它们实际上是如何工作的,从我们在地址栏中键入网络地址开始,到我们试图访问的页面显示在屏幕上,会发生什么?
这个看似超级简单的过程中涉及更多的内容,在下面我们将导航、获取数据、解析 和 渲染等步骤,来探究浏览器工作原理
1.导航导航是加载网页的第一步。它指的是当用户通过点击一个链接、在浏览器地址栏中写下一个网址、提交一个表格等方式请求一个网页时发生的过程
DNS查询(解决网址问题)导航到一个网页的第一步是找到该网页的静态资源位置(HTML、CSS、Javascript和其他类型的文件)。如果我们导航到 example.com ,HTML 页面位于 IP 地址为 93.184.216.34 的服务器上(对我们来说,网站是域名,但对计算机来说,它们是 IP 地址)。如果我们以前从未访问过这个网站,就必须进行域名系统(DN ...
对象取值取值在程序中非常常见,比如从对象obj中取值
1234567const obj = { a:1, b:2, c:3, d:4, e:5}
es6中可以这样写
123const {a,b,c,d,e} = objconst f = a + dconst g = c + e
如果数据对象中的属性名不是我想要的,可以重命名
1const {a:a1} = obj
解构的对象不能为undefined,null。否则会报错,所以要给被解构的对象一个默认值
1const {a,b,c,d,e} = obj || {}
合并数据合并两个数组,合并两个对象
1234567891011const a = [1,2,3];const b = [1,5,6];const c = a.concat(b);//[1,2,3,1,5,6]const obj1 = { a:1,}const obj2 = { b:1,}const o ...
数组常用方法及兼容性总结数组的的方法名
方法的作用
方法的参数(方法运行的时候需要什么值或变量)
方法的返回值
是否会改变原有数组
兼容性
push1234var ary = ['a','b','c'];var res = ary.push('d','e');console.log(ary); // ["a", "b", "c", "d", "e"]console.log(res); // 5
向数组的末尾添加项
参数就是要新增的项(如果增加多项就在参数位置逗号隔开)
返回值是数组的新长度
原有数组改变
所有主要浏览器都支持
unshift1234var ary = ['a','b','c'];var res = ary.push('d','e');console.log(ary); ...
webpack常用配置什么是webpack
webpack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。
构建就是把源代码转换成发布到线上的可执行 JavaScrip、CSS、HTML 代码,包括如下内容。
代码转换:TypeScript 编译成 JavaScript、SCSS 编译成 CSS 等。
文件优化:压缩 JavaScript、CSS、HTML 代码,压缩合并图片等。
代码分割:提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载。
模块合并:在采用模块化的项目里会有很多个模块和文件,需要构建功能把模块分类合并成一个文件。
自动刷新:监听本地源代码的变化,自动重新构建、刷新浏览器。
代码校验:在代码被提交到仓库前需要校验代码是否符合规范,以及单元测试是否通过。
自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统。
构建其实是工程化、自动化思想在前端开发中的体现,把一系列流程用代码去实现,让代码 ...
Vue2初渲染流程
template模板 => ast 语法树(描述语法的)=> render函数 => 虚拟dom
new Vue时会产生一个watcher(渲染watcher) vm._update(vm._render()) 创建真实节点
获取template模版
render 有render直接使用
template 没有render看template
最后是el找html找外部模板
123456789101112131415161718192021222324// init.jsexport function initMixin(Vue){ Vue.prototype._init = function(options){ ... if(vm.$options.el){ vm.$mount(vm.$options.el) } } Vue.prototype.$mount = function(el){ ...










