javascript作用域编译浅析

news2024/10/6 12:26:15

作用域思维导图

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.coloradmin.cn/o/1479902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java: 错误: 不支持发行版本 5

目录 一、问题描述 二、解决办法 方法一:修改idea设置中的jdk版本 方法二:配置pom.xml文件 方法三:配置maven的xml文件(推荐) 三、结果 一、问题描述 问题描述:今天创建了一个maven项目,…

第六课:NIO简介

一、传统BIO的缺点 BIO属于同步阻塞行IO,在服务器的实现模型为,每一个连接都要对应一个线程。当客户端有连接请求的时候,服务器端需要启动一个新的线程与之对应处理,这个模型有很多缺陷。当客户端不做出进一步IO请求的时候,服务器…

Gitlab: 私有化部署

目录 1. 说明 2. 资源要求 3. 安装 4. 配置实践 4.1 服务器 4.2 人员与项目 4.2 部署准备 4.2.1 访问变量及用户账号设置 4.2.2 Runner设置 4.2.3 要点 5. 应用项目 CI/CD 6. 参考 1. 说明 gitlab是一个强大且免费的代码管理/部署工具,能统一集成代码仓…

springboot233大学生就业需求分析系统

大学生就业需求分析系统设计与实现 摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲&#xff…

SpringBoot接收参数的几种形式

SpringBoot接收参数的几种形式 在SpringBoot中获取参数基本方式有5种,需要都掌握. 这里需要记住一个技术术语或概念 API接口: 你写好的那个URL地址,就被称为API接口 1. 接收常规参数 给/param/demo1这个URL接口发送id, name两个参数 以上是以GET请求类型进行发送,实际发送…

一封来自 DatenLord 关于GSoC 2024的挑战书

Google Summer of Code 是一项全球性的在线计划,致力于将新的contributor引入开源软件开发领域。GSoC 参与者在导师的指导下,与开源组织合作开展为期 12 周以上的编程项目。今年,达坦科技入选作为开源社区组织,携CNCF Sandbox项目…

深入探讨Java中的OutputStreamWriter类

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

动态规划(算法竞赛、蓝桥杯)--分组背包DP

1、B站视频链接&#xff1a;E16 背包DP 分组背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int v[N][N],w[N][N],s[N]; // v[i,j]:第i组第j个物品的体积 s[i]:第i组物品的个数 int f[N][N]; // f[i,j]:前i组物品&#xff0c;能放…

Power Apps 学习笔记 -- Plugin

文章目录 1. Plugin 简介2. Plugin 配置2.1 步骤Step核心分析 3. Plugin 代码 1. Plugin 简介 Plugin基础教程 : Plugin基础教程 插件Plugin: 1. 插件Plugin通常用于默认数据处理操作区间&#xff0c;增加数据默认行为的方法。(无重用性)2. Plugin 配置 .NET环境&#xff1a;.…

图像分割 - 轮廓拟合(最小外接矩形和圆形)

1、前言 拟合:用一条光滑的曲线将平面上的点连接起来 轮廓拟合:将凹凸不平的轮廓用平整的几何图形体现出来 本章将介绍如何用最小外接矩形或者最小外接圆形将下面的图像轮廓拟合 几何图形的轮廓绘制,参考前面的文章:图像分割 - 查找图像的轮廓(cv2.findContours函数) 2、…

rk3568-一种基于wifi的网络环境搭建方案

前言&#xff1a; PC--Ubuntu--开发板 三者之间的网络互相ping通很重要&#xff0c;尤其是ubuntu和开发板互ping成功最关键&#xff0c;关系到nfs&#xff0c;tftp等常用的开发手段。现在大多数开发板都带有wifi芯片&#xff0c;现在提供一种方案可以三个设备无线地搭建网络环境…

这4款一键生成的AI写作软件值得一试

自今年初以来&#xff0c;各类AI工具如潮水般涌现&#xff0c;包括AI写作、AI绘画、AI音频处理和AI抠图等等。这些工具层出不穷&#xff0c;为我们的工作和生活带来了极大的便利。学会充分利用这些AI工具可以显著提升我们的生产效率。 软件一&#xff1a;爱制作AI 推荐指数&am…

在实训云平台上配置云主机

文章目录 零、学习目标一、实训云升级二、实训云登录&#xff08;一&#xff09;登录实训云&#xff08;二&#xff09;切换界面语言&#xff08;三&#xff09;规划云主机实例 三、创建网络三、创建路由器2024-2-29更新到此四、添加接口五、创建端口六、添加安全组规则七、创建…

一文详解CRM系统是什么?让你轻松了解CRM的全貌!

互联网上关于CRM管理系统的介绍文章各式各样&#xff0c;但是很多都是为了做品牌推广&#xff0c;并不能真正帮助读者理解CRM这一系统。这篇文章有别于您读到的其他文章&#xff0c;将从CRM系统的概念理解、常见分类、基础功能、应用阶段、发展趋势、系统定价和选型技巧这七个方…

Tomcat 下部署若依单体应用可观测最佳实践

实现目标 采集指标信息采集链路信息采集日志信息采集 RUM 信息会话重放 即用户访问前端的一系列过程的会话录制信息&#xff0c;包括点击某个按钮、操作界面、停留时间等&#xff0c;有助于客户真是意图、操作复现 版本信息 Tomcat (9.0.81)Springboot(2.6.2)JDK (>8)DDT…

mount命令最新详细教程

背景 需要在设备上面&#xff0c;自动化运行u盘里面的脚本&#xff0c;并且进入一个产测模式。因此实际使用了这个mount命令&#xff0c;所以&#xff0c;写了这么一篇供大家参考。 一. 定义 mount命令在Linux和类Unix系统中用于挂载文件系统&#xff0c;即将存储设备…

Android NDK底层BUG,记录:connect、socket(AF_INET, SOCK_STREAM, 0) 等系统套接字接口函数崩溃问题。

在 Android NDK 之中&#xff0c;看上去调用 connect、socket 函数是不会崩溃的&#xff0c;但这是否定的&#xff0c;它在特定的情况下存在必定的崩溃的问题。 但是这种情况放到MACOS、LINUX、WINDOWS都不会崩溃&#xff0c;而它崩溃的点出现在操作系统底层。 人们需要参考这…

ssm656基于JAVA的校园失物招领平台的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 课题…

计算机网络:数据链路层知识点汇总

文章目录 一、数据链路层功能概述二、封装成帧和透明传输三、差错控制&#xff08;检错编码&#xff09;四、差错控制&#xff08;纠错编码&#xff09;五、流量控制与可靠传输机制六、停止-等待协议七、后退N帧协议&#xff08;GBN&#xff09;八、选择重传协议&#xff08;SR…

一周学会Django5 Python Web开发-Django5列表视图ListView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计27条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…