javascript作用域编译浅析

作用域思维导图

javascript作用域思维导图

1:编译原理

  1. 分词/词法分析

    如果词法单元生成器在判断a是一个独立的词法单元还是其他词法单元的一部分时,调用的是有状态的解析规则,那么这个过程就被称为词法分析。

  2. 解析/语法分析

    由词法单元流转换成一个由元素逐级嵌套所组成代表程序语法结构的树,被称为“抽象语法树”;(Abstract Syntax Tree, 简称AST

  3. 代码生成

    AST转换为可执行代码的过程被称作代码生成;

现在javascript引擎准备了,编译器和作用域也准备就绪。

2:编译器处理

var a = 2

1:编译器在作用域中查找之前有没有声明过变量,有则不会重新声明变量,没有则重新声明变量;

2:编译器会为引擎生成运行时所需的代码。当然引擎在运行前,会到作用域中查询有没有这个变量,如果有这个变量,则引擎会进行处理;否则会抛出错误;

变量的赋值操作执行的两个动作,首先编译器在作用域中声明一个变量(之前没有声明过的话)。然后在运行时,引擎会在作用域中查找改变量,如果能够找到就对它赋值处理。

3:LHSRHS

引擎对变量a进行LHS查询,另一个查找类型叫做RHS;

LR分别代表赋值操作的左侧和右侧

LHS赋值操作的目标是谁

RHS谁是赋值操作的源头

4:作用域嵌套

当一个块或函数嵌套在另一个块或函数中时,就发生了作用域的嵌套;

5:异常

a = 2

以上代码在引擎执行LHS查询时,在当前作用域中查找不到时,会向上查找,直到在全局作用域中仍然查找不到时,全局作用域就会创建一个具有该名称的变量,并提供给引擎使用,前提是程序运行在非“严格模式”下。

如果是在ES5“严格模式”下,全局作用域不会主动创建,引擎则会抛出ReferenceError异常

如果全局作用域中有一个变量a,但是类型和当前重新声明的类型不一致时,则引擎会抛出以一个类型的异常:TypeError;

简单做个笔记,还望指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/511160.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CVE-2024-23334 AIOHTTP 目录遍历漏洞复现

aiohttp简介 aiohttp 是一个基于 asyncio 实现的 Python HTTP 客户端和服务器框架。它提供了异步的 HTTP 客户端和服务器功能,能够处理高并发的网络请求。以下是关于 aiohttp 的一些重要特点和用途: 基于 asyncio:aiohttp 是基于 Python 的 a…

no declaration can be found for element ‘rabbit:connection-factory‘

spring-mvc 配置 rabbitmq 出现问题。 我的解决方案如下: 1 找到配置文件 spring-rabbitmq.xml 我的配置文件叫:spring-rabbitmq.xml,你们按照自己的查找。 2 定位如下URI 接着 Ctrl鼠标左键 3 确定spring-rabbit-x.x.xsd 按照步骤2 &…

Leetcode刷题笔记题解(C++):232. 用栈实现队列

思路:双栈实现入队列和出队列的操作 //AB栈来实现队列 //A栈用来push 可以利用A栈获取到队列的back即A.top //B栈用来pop 如果要获取队列的top,可以先把A栈元素依次弹出依次压入B栈中,然后B.top就是队列的top,pop也类似 cla…

记录些大语言模型(LLM)相关的知识点

槽位对齐(slot alignment) 在text2sql任务中,槽位对齐(slot alignment)通常指的是将自然语言问题中的关键信息(槽位)与数据库中的列名或API调用中的参数进行匹配的过程。这个过程中&#xff0c…

03-grafana的下拉列表选项制作-grafana的变量

一、准备环境 为了实现下拉列表筛选的样例,我们监控两个linux节点; 目前,我们已经有了一个节点了,再添加一个; 二、grafana的仪表盘变量 如果想给仪表盘自定义下拉列表,那么,需要设置变量&#…

秘密共享差分隐私原理解析

1. 隐私计算全貌  可以看到,隐私计算技术从1979年就开始了,历经四代从安全多方计算(MPC)、到差分隐私(DP)、到集中加密技术(TEE),再到联邦学习(FL)。 2. 秘密共享 secret Sharing 就是“秘密分享”或者“秘密共享”…

YOLOv8从入门到入土使用教程!(一)训练模型

⭐⭐⭐瞧一瞧看一看,新鲜的YOLOv9魔改专栏来啦!⭐⭐⭐ 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、本文介绍 本文将演示如何使用YOLOv8进行训练及预测! 二…

Android m/mm/mmm/make编译模块

一.编译成模块的前置条件 Android编译环境初始化完成后,我们就可以用m/mm/mmm/make命令编译源代码了。lunch命令其实是定义在build/envsetup.sh文件中的函数lunch提供的。与lunch命令一样,m、mm和mmm命令也分别是由定义在build/envsetup.sh文件中的函数…

【QT】C/C++ 文件属性设置(隐藏、只读、加密等)方法和程序示例

目录 1文件属性设置 1.1 GetFileAttributes 获取文件属性函数的返回值 1.2 SetFileAttributes 设置文件属性函数 2 文件属性设置示例 1文件属性设置 在MSDN中,文件总共有15种属性,根据磁盘的分区格式不同,文件的属性也会不同。 需要包含头…

182基于matlab的半监督极限学习机进行聚类

基于matlab的半监督极限学习机进行聚类,基于流形正则化将 ELM 扩展用于半监督,三聚类结果可视化输出。程序已调通,可直接运行。 182matlab ELM 半监督学习 聚类 模式识别 (xiaohongshu.com)

2D/3D相机手眼标定总结

1. 九点标定 九点标定法的本质: 无需进行相机内参标定,只能识别x,y坐标,属于2D平面标定,在标定过程中z是未知的。 该算法的核心是仿射变换,即图像坐标系到机器人坐标系的2D仿射变换(注意这里并不…

B084-SpringCloud-Zuul Config

目录 zuul系统架构和zuul的作用zuul网关实现配置映射路径过滤器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端统一访问入口 系统架构和zuul的作用 zuul把自己注册进eureka,然后可通过前端传来的服务名发现和访问对应的服务集群 为了预防zuul单点故…