首页 > 编程语言 >JavaScript 运行机制

JavaScript 运行机制

时间:2024-11-23 09:33:33浏览次数:9  
标签:异步 函数 压入 队列 JavaScript 运行机制 执行

JavaScript 是单线程的脚本语言,其运行机制主要基于事件循环(Event Loop)。

  1. 执行栈(Call Stack)
    • 执行栈是一个存储函数调用的栈结构。当 JavaScript 代码开始执行时,首先会有一个全局执行上下文(Global Execution Context)被压入执行栈。
    • 当遇到函数调用时,一个新的函数执行上下文会被创建并压入栈顶。函数执行完后,其执行上下文会从栈顶弹出。例如:
function add(a, b) {
    return a + b;
}
function multiply(a, b) {
    return a * b;
}
let result1 = add(3, 5);
let result2 = multiply(result1, 2);
  • 在这个例子中,首先add函数的执行上下文被压入执行栈,执行完后弹出。然后multiply函数的执行上下文被压入栈,执行完后弹出。
  1. 堆(Heap)

    • 堆是用于存储对象和动态分配内存的地方。在 JavaScript 中,所有对象(包括函数)都是存储在堆中的。
    • 例如,当我们创建一个对象let person = {name: 'John', age: 30};,这个对象就存储在堆中。对象的引用(在这个例子中person变量)存储在执行栈或其他地方(如闭包环境),通过这个引用可以访问堆中的对象。
  2. 消息队列(Message Queue)

    • 消息队列也叫任务队列(Task Queue),用于存储异步任务的回调函数。当一个异步操作(如定时器、网络请求等)完成时,其对应的回调函数会被放入消息队列。
    • 例如,setTimeout(() => { console.log('Delayed message'); }, 1000);,当定时器设定的 1 秒时间过去后,回调函数() => { console.log('Delayed message'); }会被放入消息队列。
  3. 事件循环(Event Loop)

    • 事件循环是 JavaScript 的核心运行机制。它不断地检查执行栈是否为空,如果为空,就会从消息队列中取出一个任务(回调函数)并将其压入执行栈执行。
    • 只要消息队列中有任务,事件循环就会一直运行,不断地将任务从消息队列移到执行栈执行。这样就实现了 JavaScript 的异步操作,让代码能够在等待异步任务完成的同时执行其他代码。
    • 比如,在一个网页应用中,用户点击一个按钮会触发一个事件,这个事件的处理函数会被放入消息队列,当执行栈为空时,事件循环就会将这个处理函数压入执行栈执行。

JavaScript 的这种运行机制使得它能够高效地处理单线程环境下的同步和异步任务,同时也为开发者提供了方便的异步编程方式,如使用回调函数、Promise 和 async/await 等。

标签:异步,函数,压入,队列,JavaScript,运行机制,执行
From: https://blog.csdn.net/alittlehippo/article/details/143987013

相关文章

  • JavaScript语法基础——变量,数据类型,运算符和程序控制语句(小白友好篇,手把手教你学会!)
     一、JavaScript概述JavaScript是一种高级编程语言,常用于网页开发和服务器端应用程序。它是一种动态类型语言,可以在浏览器中直接解释执行,而不需要编译。脚本(Script)是一种与计算机程序相关的指令集或代码块,用于执行特定的任务或操作。脚本通常用于自动化重复性的任务或进行特......
  • python、JavaScript 、JAVA等实例代码演示教你如何免费获取股票数据(实时数据、历史数
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • javascript对象介绍
    1.什么是对象?在JavaScript中,对象是一个无序的键值对集合,可以用来存储数据和功能。对象可以包含原始值、函数(方法)以及其他对象,是构建复杂数据结构和实现面向对象编程的基础。2.创建对象2.1字面量方式最常见的创建对象的方法是使用对象字面量:constperson={n......
  • JavaScript 第27章:构建工具与自动化
    在现代JavaScript开发中,构建工具、代码转换工具、代码质量和代码格式化工具对于提高开发效率、保持代码整洁以及确保代码质量有着至关重要的作用。下面将分别介绍Webpack、Babel、ESLint和Prettier的配置与使用,并给出一些示例。1.构建工具:Webpack配置与使用Webpack是一个......
  • JavaScript 第25章:Vue 基础
    在学习JavaScript的第25章关于Vue的基础知识时,我们将从以下几个方面来了解Vue框架,并通过一个实战案例来巩固所学的知识。Vue概述Vue.js是一个用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,易于上手,同时......
  • JavaScript 的基础语法和数据类型的概述
    JavaScript是一种广泛使用的编程语言,主要用于Web开发。它拥有简洁的语法和丰富的功能。以下是JavaScript的基础语法和数据类型的概述。基础语法变量声明使用var、let或const关键字声明变量。varname="Alice";letage=25;constpi=3.14;数据类型J......
  • JavaScript 数据类型转换全解析:转换为数值、字符串与布尔型
    目录非VIP用户可前往公众号“前端基地”进行免费阅读转换为数值型转换为数值型Number()函数parseInt()函数parseFloat()函数转换为字符串型转换方法toString()函数String()函数转换为布尔型转换方法Boolean()函数非VIP用户可前往公众号“前端基地”进行免......
  • JavaScript初级课程 variables
    下载node。1.申明变量variables.jsletmessage="Hello!";message="World";console.log(message);nodevariables.js2.申明不会变的变量constCOLOR_GREEN="green";console.log(COLOR_GREEN)3.数据类型DataTypes=[number,BigInt,string......
  • 实验三: JavaScript数组与函数
    实验目的熟练掌握常用JavsScript的数组、自定义函数、作用域。实验内容数组定义及元素获取;数组的遍历;数组内容的增删改查;数组的排序;数组的反转、截取、合并、元素拼接函数的声明;函数的调用;匿名函数;作用域。实验步骤:数组定义及元素获取;数组的遍历;数组内容的增删改查......
  • 在调试网页 JavaScript 脚本时,遇到 Error: Incorrect contents fetched, please reloa
    在调试网页JavaScript脚本时,遇到Error:Incorrectcontentsfetched,pleasereload这样的错误,通常表明网页内容的获取过程出现了问题。这种错误一般与页面加载、缓存管理、网络请求、脚本执行顺序等因素密切相关。为了更详细地分析问题,处理并解决这一错误,下面将从多个......