blog icon indicating copy to clipboard operation
blog copied to clipboard

瓶博:每日更新,前端前进

Results 101 blog issues
Sort by recently updated
recently updated
newest added

例如: ```js http://www.qq.com // 通过 http://www.qq.com.cn // 不通过 http://www.qq.com/a/b // 通过 http://www.qq.com?a=1 // 通过 http://www.123qq.com?a=1 // 不通过 ``` **解答:正则** ```js function check(url){ if(/\/\/w+\.qq\.com[^.]*$/.test(url)){ return true; }else{ return false; } }...

一道面试题引发的血案,下面进入主题: ```js // 今日头条面试题 async function async1() { console.log('async1 start') await async2() console.log('async1 end') } async function async2() { console.log('async2') } console.log('script start') setTimeout(function () { console.log('settimeout') }) async1() new...

### 垃圾回收机制 我们知道,程序运行中会有一些垃圾数据不再使用,需要及时释放出去,如果我们没有及时释放,这就是内存泄露 JS 中的垃圾数据都是由垃圾回收(Garbage Collection,缩写为 GC)器自动回收的,不需要手动释放,它是如何做的喃? 很简单,JS 引擎中有一个后台进程称为垃圾回收器,它监视所有对象,观察对象是否可被访问,然后按照固定的时间间隔周期性的删除掉那些不可访问的对象即可 现在各大浏览器通常用采用的垃圾回收有两种方法: - 引用计数 - 标记清除 #### 引用计数 最早最简单的垃圾回收机制,就是给一个占用物理空间的对象附加一个引用计数器,当有其它对象引用这个对象时,这个对象的引用计数加一,反之解除时就减一,当该对象引用计数为 0 时就会被回收。 该方式很简单,但会引起内存泄漏: ```js // 循环引用的问题 function temp(){ var a={}; var b={}; a.o...

## 基础版 useState #### 简单实现:只是数组 通过数组实现,初始化的时候,创建两个数组:`states` 与 `setters` ,设置光标 `cursor` 为 `0` - 第一次调用 `useState` 时,创建一个 `setter` 函数放入 `setters` 中,并初始化一个 `state` 放入 `states` 中 - 之后每次重新渲染时,都会重置光标 `cursor` 为 `0` ,通过...

已知,JavaScript 是单线程的,天生异步,适合 IO 密集型,不适合 CPU 密集型,但是,为什么是异步的喃,异步由何而来的喃,我们将在这里逐渐讨论实现。 ### 一、进程与线程 #### 1. 浏览器是多进程的 它主要包括以下进程: - Browser 进程:浏览器的主进程,唯一,负责创建和销毁其它进程、网络资源的下载与管理、浏览器界面的展示、前进后退等。 - GPU 进程:用于 3D 绘制等,最多一个。 - 第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建。 - 浏览器渲染进程(浏览器内核):内部是多线程的,每打开一个新网页就会创建一个进程,主要用于页面渲染,脚本执行,事件处理等。 #### 2. 渲染进程(浏览器内核) 浏览器的渲染进程是多线程的,页面的渲染,JavaScript 的执行,事件的循环,都在这个进程内进行: -...

配置 webpack 其实很简单,基础的构建可以按照以下方式来配置 webpack: - 想让源文件加入到构建流程中去被 webpack 控制,配置 `entry`。 - 想自定义输出文件的位置和名称,配置 `output`。 - 想自定义寻找依赖模块时的策略,配置 `resolve`。 - 想自定义解析和转换文件的策略,配置 `module`,通常是配置 `module.rules` 里的 Loader。 - 其它的大部分需求可能要通过 Plugin 去实现,配置 `plugin`。 基础的配置,这里就不再做过多的介绍,在文章结尾会给出完整配置: 当使用 webpack 进行打包,一般会出现两方面的问题:...

标题:DNS 协议是什么?完整查询过程?为什么选择使用 UDP 协议发起 DNS 查询? 摘要:你可能了解 DNS 协议是什么?那你了解 DNS 完整查询过程是什么吗?它底层是基于 TCP 还是 UDP 喃?TCP 与 UDP 又各自负责 DNS 的哪些部分喃? ## 引言 本文从以下几个方面循序渐进走进 DNS 协议、它的完整查询过程以及底层是基于 UDP 还是 TCP 实现? -...

## 引言 本文从以下几个方面,循序渐进走进 HTTP 状态码 - 状态码用来做什么的 - 常见状态码有哪些 - 容易争论的点 ## 状态码用来做什么的 HTTP 状态行中使用状态码(Status Code)和原因短语(Reason Phrase)来简单描述请求的结果 ![](http://resource.muyiy.cn/image/20210521005806.png) - Version:版本号,例如 HTTP/2 - Reason:是状态码的简短文字描述,例如“OK”“Not Found”等等,也可以自定义,它其实对状态码的解释说明 - Status Code:状态码,表示服务器对请求的处理结果 这里我们重点介绍状态码,状态码是用以表示 HTTP 响应状态的...

**Promise就是为了解决callback的问题而产生的。** Promise 本质上就是一个绑定了回调的对象,而不是将回调传回函数内部。 **开门见山,Promise解决的是回调函数处理异步的第2个问题:控制反转**。 我们把上面那个多层回调嵌套的例子用Promise的方式重构: ```js let getPromise1 = function () { return new Promsie(function (resolve, reject) { $.ajax({ url: 'XXX1', success: function (data) { let key = data; resolve(key);...

## 引言 本文从四个方面循序渐进介绍 `Promise.allSettled` : - `Promise.all()` 的缺陷 - 引入 `Promise.allSettled()` - `Promise.allSettled()` 与 `Promise.all()` 各自的适用场景 - 手写 `Promise.allSettled()` 实现 下面正文开始👇 ## Promise.all() 的缺陷 我们在之前的一篇文章中已经介绍过,当我们使用 `Promise.all()` 执行过个 `promise` 时,只要其中任何一个`promise` 失败都会执行...