作用域是什么?
时间:2019-09-23
本文章向大家介绍作用域是什么?,主要包括作用域是什么?使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 编译原理
- 分词/词法分析 tokenizing/lexing
- 将代码字符串分解,如
var a = 2;
会被分解为var、a、=、2、;。每个独立的单元成为词法单元(token). - 空格是否作为词法单元,看空格是否有意义。
- 词法单元生成器判断a是否为其他词法单元的一部分,调用的是有状态的解析规则,这个过程就是词法分析。 如果是无状态,就是分词。
- 将代码字符串分解,如
- 解析/语法分析
- 将此法单元流(数组)转换为抽象语法树。如下图
- 将此法单元流(数组)转换为抽象语法树。如下图
- 代码生成
- 将AST转换为可执行代码的过程。
- 即将写的代码翻译为一组机器指令,创建变量,分配内存,并将值储存其中。
- 将AST转换为可执行代码的过程。
- 对于var a
- 分词/词法分析 tokenizing/lexing
- 理解作用域
- 引擎
- 程序的编译和执行
- 编译器
- 语法分析和代码生成等
- 作用域
- 收集并维护由所有标识符组成的一系列查询,确定当前执行的代码对这些标识符的访问权限
- 变量的赋值
- 编译器在当前作用域中声明一个变量(如果之前没有声明过);运行时引擎在作用域中查找该变量,能找到就对它赋值
- 引擎
- LHS和RHS
- 变量在赋值操作的左边,进行LHS查询;右边RHS
- RHS查询就是查找某个变量的值,LHS查询是找到变量的容器,所以可以对其赋值
console.log(a); // RHS
要查找a的值
a = 2; //LHS
为 = 2这一赋值操作找一个目标(容器)
- ```js
function foo(a) {
console.log( a ); // 2
}
foo(2);
- 最后一行foo(..)的调用,RHS引用, 因为要找到foo的值
- 传参时,隐式的a = 2操作,LHS查询,= 2的容器查找
- console.log(a)的RHS查询a的值
若console.log()可以接收参数,将2(上面的RHS查询找到a的值)赋值给arg1,参数1为LHS。
```函数声明是LHS还是RHS?
- 变量在赋值操作的左边,进行LHS查询;右边RHS
- 作用域嵌套
- 作用域是用来确定在哪里以及如何查找标识符的规则。
- why lhs & rhs?
- 对于未声明的变量
- 23
- 若为LHS,即为被赋值的容器
- 若为严格模式,ReferenceError
- 若为非严格模式,自动创建一个变量(全局作用域中),返还给引擎。
- 若为RHS,找不到该值,ReferenceError
- 练习
- 凡是右侧的标识符(不是数字,包括函数,标识符和数字的二进制表示不同)。都要进行RHS
原文地址:https://www.cnblogs.com/wydumn/p/11575488.html
- RGW性能监控及源码实现
- JSP中文乱码的产生原因及解决方案
- 比较Swing中三种注册事件的方法
- Kafka单节点至集群的安装部署及注意事项
- JavaScript onchange 事件:表单文本域或选择域发生改变
- 利用反射比较两个对象字段值是否相等
- 更新Silverlight ctp到Silverlight beta 1.0
- JSON.stringify(), JSON.parse(), toJSON()方法使用
- compression功能测试
- 源码阅读再来一发:解读RGW中request的处理流程
- 绘制Crushmap分布图-Python
- RGW奇淫技巧-玩转system特权
- 源码走读rgw内置civetweb的参数初始化过程
- 重磅:Flume1-7结合kafka讲解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nest.js 从零到壹系列(八):使用 Redis 实现登录挤出功能
- 创建常用功能加载宏
- 3分钟短文 | Linux 使用curl发起post请求的4个常用方式
- 类模块——接口
- OpenCV与图像处理(三)
- 常用功能加载宏——单元格数字转变
- OpenCV与图像处理(二)
- ECCV2020 | SOD100K:超低参数量的高效显著性目标检测算法,广义OctConv和动态权重衰减
- Rust FFI 编程 - Rust导出共享库02
- 常用功能加载宏——单元格数字格式
- 【翻译】200行代码讲透RUST FUTURES (2)
- 【Rust日报】2020-07-23 Rust 的 CI 将使用 GitHub Actions
- 【每周一库】- Tonic 基于Rust的gRPC实现
- 错误捕获
- 常用功能加载宏——单元格合并