生成器函数在 JavaScript 中的出现早于引入 async/await,这意味着在创建异步生成器(始终返回 Promise 且可以 await 的生成器)的同时,还引入了许多需要注意的事项。
众所周知,JavaScript 是单线程的,但异步在 js 中很常见,那么简单来介绍一下异步编程
最近在整一个 OpenAPI 编排器,想到 npm-run-all 的任务流。看了一下这个 6 年前的源码。npm-run-all[1] 是一个用来并行或者串行运行多个 npm 脚本的 CLI 工具。阅读完本文,你能收获到:
在写这篇文章之前,我看了很多写的不错的文章,但是每篇文章都有那么几个关键的点,很多篇文章凑在一起综合来看,才可以对这些概念有较为深入的理解。所以,我就想要写这么一篇文章,结合自己的理解以及示例代码,用最通俗的文字表达出来。
我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HTTP协议为无连接的协议);
面试题如下,大家可以先试着写一下输出结果,看与正确答案是否有出入,如果大家不能准确的做出答案,可以通过下面对微任务,事件循环,定时器等相关代码执行顺序的讲解,让大家焕然一新。
面试题如下,大家可以先试着写一下输出结果,然后再看我下面的详细讲解,看看会不会有什么出入,如果把整个顺序弄清楚 Node.js 的执行顺序应该就没问题了。
单线程是 JavaScript 核心特征之一。这意味着,在 JS 中所有任务都需要排队执行,前一个任务结束,才会执行后一个任务。
JavaScript是ECMAScript的实现和扩展,由ECMA(一个类似W3C的标准组织)参与进行标准化。ECMAScript定义了:
每启动一个应用程序,操作系统都会为此程序创建一块内存,用来存放代码、数据数据、一个执行任务的主线程,我们把这样的一个运行环境叫进程。
async函数是一个特殊的函数,它内部包含异步操作,并且返回一个Promise对象。在async函数中,我们可以使用await关键字来等待一个Promise对象的解析,并在解析完成后继续执行下一行代码。
promise在低版本浏览器需要通过pollyfill处理不同浏览器对promise解析的差问题,处理方法为,在main.js里加入如下代码 import promise from 'es6-promise'; promise.polyfill(); webpack中的babel处理的目录是在webpack.base.conf.js中通过includes配置的,默认没有包含node_modules下的库文件,某些npm包没有做es6新语法的处理,我们的webpack又没有编译这部分文件,就会报错,最常见的就
作为一个庞大的家族,Babel生态中有很多概念,比如:preset、plugin、runtime等。
我们经常不关心并发操作的完成顺序。例如,假设我们有一个Web服务器处理来自客户端的请求。每个请求所花费的时间可能会有所不同,响应返回的顺序也无关紧要
node.js是一个基于Google V8引擎的、跨平台的JavaScript运行环境,不是一个语言
最近在做自己的小程序《看啥好呢》,这个小程序是使用云开发的方式开发的,功能特别简单,就是获取豆瓣、大麦网的数据展示,虽然功能简单,但还是记录下开发过程和一些技术点,大约会有两篇博文产出,这是第二篇。GitHub地址
在 解析配置时,Vite 做了这些事 一文中,我们知道了 vite dev 时通过 resolveConfig 去获取并合并配置,处理插件顺序和执行 config 、configResolved 钩子,最后还学习了 alias 以及 env 的配置处理。
通过一个demo带你深入进入webpack@4.46.0源码的世界,分析构建原理,专栏地址,共有十篇。
这里,传入 mutiple 的是四个分离的参数,但是如果在 mutiple 函数里尝试输出 args 的值,会发现它是一个数组:
在本文中,我们将探讨过去异步执行的 JavaScript 的演变,以及它是怎样改变我们编写代码的方式的。我们将从最早的 Web 开发开始,一直到现代异步模式。
如果没有defer或async属性,浏览器会立即加载并执行相应的脚本。它不会等待后续加载的文档元素,读取到就会开始加载和执行,这样就阻塞了后续文档的加载。
一般非基础类型进行转换时会先调用 valueOf,如果 valueOf 无法返回基本类型值,就会调用 toString
Event Loop 这个概念相信大家或多或少都了解过,所谓温故而知新,so,今天,我们就从event loop出发,看看在事件的执行过程中,他都经历了些什么。
HTTP/2旨在解决HTTP/1.x的许多缺陷。现代web页面使用许多资源:HTML、样式表、脚本、图像等等。在HTTP/1.x中,必须显式地请求这些资源中的每一个。这可能是一个缓慢的过程。浏览器从获取HTML开始,然后在解析和计算页面时逐步了解更多资源。由于服务器必须等待浏览器发出每个请求,因此网络通常处于空闲状态且未充分利用。
Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境
浏览器会将所有的回流、重绘的操作放在一个队列中,当队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会对队列进行批处理。这样就会让多次的回流、重绘变成一次回流重绘。
在最近发布的Node v18.6.0中,带来了一个试验特性ESM Loader Hooks API[1]。
TypeScript 4.5 已于 10.1 发布 beta 版本,本文将介绍部分其中值得关注的新特性与变更,如新增 .mts / .cts 扩展名、新的类型导入语法、新增内置工具类型等,你也可以阅读 devblog[1] 原文了解更多。
这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了。
但是这些a标签可能包含一些像span、img等元素,如果点击到了这些a标签中的元素,就不会触发click事件,因为事件绑定上在a标签元素上,而触发这些内部的元素时,e.target指向的是触发click事件的元素(span、img等其他元素)。
JS 的特色就是异步编程,所有有很多关于异步的考点,本章都会讲解。如 event loop、promise、async-await、微任务和宏任务。学不会这些,就不算是精通 JS。
JS会在创建变量时自动分配内存,在不使用的时候会自动周期性的释放内存,释放的过程就叫 “垃圾回收”。
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
总结一点:JavaScript是单线程的,但是浏览器不是单线程的。一些I/O操作,定时器的计时和事件监听是由其他线程完成的。
15 | 消息队列和事件循环:页面是怎么"活"起来的 渲染进程我们已经知道他有一个主线程,这个主线程非常非常的繁忙,要处理DOM、布局,还要处理JS任务和各种输入事件,因此为了保证不同类型任务的执行,需要一个系统来调度这些任务,这个调度系统就是本节要探究的消息队列和事件循环。 引入事件循环和消息队列过程 如果只是一些确定好的任务,然后使用一个单线程按照顺序处理这些任务就可以了,线程执行完毕退出。 但是在单线程执行任务的过程中,会处理新的任务,这个时候就需要引入循环语句和事件循环,循环机制保证线程
网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。此外爬虫还可以验证超链接和 HTML 代码,用于网络抓取。
最近,明学是一个火热的话题,而我,却也想当那么一回明学家,那就是,把JavaScript和多线程并发这两个八竿子打不找的东西,给硬凑了起来,还写了一个并发库concurrent-thread-js。尴尬的是,当我发现其中的不合理之处,即这个东东的应用场景究竟是什么时,我发现我已经把代码写完了。
XSS 攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。
根据JS的垃圾回收机制,当内存中引用的次数为0的时候内存才会被回收 全局执行上下文中的对象被标记为不再使用才会被释放
promise表示一个异步操作的最终结果。和一个promise进行交互的主要方式是通过它的then方法,该方法注册回调要么接收一个promise的最终值,要么接收promise为什么不能被满足的原因。
注意:在学习之前需要了解一下node.js和ES6的语法,所以需要本文写了node.js中的npm和ES6的模块化 ---- 一、node.js(npm) node.js:简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。与平时写的js语法基本一样,多
领取专属 10元无门槛券
手把手带您无忧上云