当前位置: 首页 > news >正文

javascript-代码执行原理

js 是解释型语言

js 引擎执行流程

分为两个阶段:

  1. 语法分析
  2. 执行阶段

执行阶段涉及的数据结构:

  • 调用栈。处理执行上下文和执行代码
  • 内存堆。给对象分配内存
  • 任务队列。暂存待执行的任务,分为宏任务队列和微任务队列

语法分析

词法分析 > 语法分析 > 代码生成(字节码)

执行阶段

代码生成后 js 引擎会先创建执行上下文(也叫预编译),再逐块(执行上下文)逐行执行代码

执行上下文

分类:

  • 全局执行上下文
  • 函数执行上下文
  • eval 函数执行上下文(下文暂不提及)

第一次读取 js 脚本时会生成全局执行上下文,有且只有一个,始终位于调用栈底部。当函数被调用时,会创建一个函数执行上下文并推入当前栈顶,执行完函数会出栈。栈顶是当前活动的执行上下文

image.png

每次创建执行上下文主要有以下几个步骤:

  1. 初始化作用域链
  2. 创建变量对象
  3. 创建 arguments 对象,检查参数上下文,初始化名称和值,并创建引用副本
  4. 扫描上下文中函数的声明
    • 对于找到的每个函数,在变量对象中创建一个属性,该属性是确切的函数名,该函数在内存中有一个指向该函数的引用指针
    • 如果函数名已经存在,指针将会被覆盖
  5. 扫描变量的声明
    • 对于找到的每个变量,在变量对象中创建一个属性,该属性是确切的变量名,该变量的值是 undefined
    • 如果变量名已经存在,将不会做任何处理继续执行
  6. 确定 this 的指向

JavaScript 执行上下文——JS 的幕后工作原理

变量、函数提升

函数和变量声明提升是在创建变量中进行的,举个例子:

function foo(a) {console.log(b);console.log(foo2);console.
http://www.lryc.cn/news/441215.html

相关文章:

  • 【C++ | tips】const Date* operator() const中这两个const有什么区别?他们的作用是什么?
  • 开放的数据时代:Web3和个人隐私的未来
  • Kafka 安全机制详解及配置指南
  • 渗透测试综合靶场 DC-2 通关详解
  • 「iOS」——单例模式
  • Selenium自动化测试面试必备:高频面试题及答案整理
  • kettle 数据库迁移 使用分页原理实现 数据库mysql
  • 量化回测bt框架,策略类bt.Strategy详解,不是backtrader!提供bt双均线策略示例,比backtrader还简单
  • 网络安全宣传周 | DNS安全威胁与应对措施分享
  • 【图书介绍】《Altium Designer 24入门与案例实践(视频教学版)》
  • mysql事务的隔离级别学习
  • Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)
  • rapidocr 提取汇总
  • Linux:用户账号管理和组账号管理
  • MyBatis-Plus分页查询、分组查询
  • 2024年9月HarmonyOS鸿蒙应用开发者高级认证全新题库(覆盖99%考题)
  • 大工程师插件下载 官方地址
  • rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链
  • 【算法】栈与模拟
  • 【Django】Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API
  • System.out源码解读——err 和 out 一起用导致的顺序异常Bug
  • 汽车软件开发之敏捷开发
  • ListBox显示最新数据、左移和右移操作
  • mysql实用系列:日期格式化
  • 时钟频率、AI采样率与AO更新率的关系
  • 代理IP设置后IP不变?可能的原因及解决方法
  • 瑞芯微RK3588开发板Linux系统添加自启动命令的方法,深圳触觉智能Arm嵌入式鸿蒙硬件方案商
  • Varjo在芬兰开设新工厂,以满足国防部门在XR模拟训练中的需求
  • python 识别省市、区县并组建三级信息数据库
  • 家用小型超声波清洗机怎么选?四大人气爆款品牌不可错过!