JavaScript的三座大山之单线程和异步

JavaScript的三座大山之单线程和异步

在前端领域中,JavaScript的三座大山分别是:单线程和异步、闭包和作用域、this指向。本次我们来详细讲解其中的单线程和异步部分。

单线程指什么?

“单线程”并不是意味着JavaScript只能执行一行代码,而是指JavaScript引擎只有一个执行栈,也就意味着一次只能执行一条指令,即同一时间只能做一件事情。这也就是为什么在JS中在执行比较耗时的代码时会出现页面卡顿现象。

异步执行

为了避免在执行比较耗时的代码时出现页面卡顿现象,JavaScript采用了异步执行的方式。异步执行在JS中的体现主要是通过回调函数和事件绑定来实现的。

JavaScript中有两种异步执行的方式:
1. 回调函数
2. Promise对象

异步执行中使用了一个任务队列(task queue)来实现任务的异步执行,任务分为同步任务和异步任务。同步任务会在执行栈中排队等待执行,异步任务会在异步任务的任务队列中排队等待执行。当执行栈中的所有同步任务都执行完成之后,JavaScript会去异步任务队列中查看是否有可执行的任务。

示例1:回调函数的使用

下面是一个回调函数的使用,我们可以看到,请求的返回时间不确定,因此需要将请求完成之后需要执行的函数(比如渲染页面等)作为回调函数传入,确保请求执行完成之后才会继续执行回调函数。

function fetchData(callback) {
  fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => {
      console.log('数据请求成功')
      callback(data) // 将请求完成之后需要执行的函数作为回调函数传入
    })
}

function renderPage(data) {
  // 渲染页面的代码
}

fetchData(renderPage);

示例2:Promise的使用

下面是一个使用Promise的例子,可以看到,Promise中的then函数会在异步请求完成之后执行,then函数中可以传入需要执行的回调函数。

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => {
    console.log('数据请求成功')
    // 渲染页面的代码
  })
  .catch(error => console.error(error))

希望本文对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript的三座大山之单线程和异步 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • vue-cli webpack2项目打包优化分享

    Vue-CLI webpack2项目打包优化分享 引言 作为Vue.js的开发者,我们在构建Vue.js项目的时候,尤其是当你的项目变得越来越庞大时,打包的时间会变得越来越慢。这不仅拖慢了我们开发的频率,也降低了我们的开发效率。在这里,我们将从webpack2的角度来分享优化Vue.js打包的一些技巧和经验。 优化打包时间 1. 使用 HappyPack H…

    node js 2023年6月8日
    00
  • JavaScript跨浏览器获取页面中相同class节点的方法

    JavaScript跨浏览器获取页面中相同class节点的方法分为两种:通过原生JavaScript获取和使用第三方库获取。 使用原生JavaScript获取相同class节点 如果我们想要获取页面中所有class名称为myclass的节点,可以使用document.getElementsByClassName()方法。此方法会返回一个HTML Collec…

    node js 2023年6月8日
    00
  • JavaScript正则表达式匹配 div style标签

    想要使用正则表达式来匹配HTML中的<div>、<style>标签,可以按照以下步骤进行: 创建正则表达式对象 const regExp = /<div.*?>([\s\S]*?)<\/div>|<style.*?>([\s\S]*?)<\/style>/gi; 这个正则表达式使用了|符…

    node js 2023年6月8日
    00
  • node.js实现登录注册页面

    下面是详细讲解“node.js实现登录注册页面”的完整攻略。 1. 环境搭建 首先需要安装Node.js运行环境和npm包管理器,可以到Node.js官网下载并安装。 安装完成后,进入命令行工具,使用npm安装Express框架和相关的模块: npm install express express-session express-validator body…

    node js 2023年6月8日
    00
  • 一文详解node.js有哪些全局对象呢

    一、node.js有哪些全局对象 在Node.js中,有些对象可以在代码的任何地方都使用,这些对象被称为全局对象。这些全局对象可以通过require()函数来引用,以下是Node.js中常用的全局对象: __dirname:表示当前执行脚本所在的目录的绝对路径。 __filename:表示当前执行脚本的文件名。 exports:表示模块的导出对象,如果想要在…

    node js 2023年6月8日
    00
  • 详解nodejs 文本操作模块-fs模块(四)

    详解nodejs 文本操作模块-fs模块(四) 在 nodejs 中,fs 模块是处理文件和目录的核心模块。在读取或写入文本数据时,fs 模块提供了多种方法和选项。本文将详细讲解如何使用 fs 模块进行文本操作。 读取文本文件 使用 fs.readFile() 方法可以读取文本文件。该方法包含三个参数:文件路径、编码格式和回调函数。例如,下面的示例将读取指定…

    node js 2023年6月8日
    00
  • NodeJS搭建HTTP服务器的实现步骤

    下面是详细的NodeJS搭建HTTP服务器的实现步骤攻略。 确定需求 在开始编写任何代码之前,我们需要先确定需要实现的HTTP服务器的基本需求。基本的需求可能包括: 能够处理HTTP GET请求 能够处理HTTP POST请求 能够处理HTTP头文件 支持静态文件服务 支持路由功能 实现这些需求的方法是编写一个基本的HTTP服务器,这个服务器能够监听请求,解…

    node js 2023年6月8日
    00
  • Node中的Events模块介绍及应用

    Node中的Events模块介绍及应用 1. 什么是Events模块 Events模块是Node中处理系统或应用程序中发生的事件的核心 Events模块大量应用于基于事件驱动的异步系统中,如网络编程、用户输入等场景 Events模块提供了一个事件触发与事件监听的能力,能够实现事件的发布/订阅、消息队列等开发 2. Events模块主要API on(event…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部