「注解」《你不知道的JavaScript(上卷)》第一章:作用域是什么

简介: 「注解」《你不知道的JavaScript(上卷)》第一章:作用域是什么

1.1 编译原理

在传统的编译语言的流程中,程序中的一段源代码在执行之前会经历以下三个步骤:

  1. 词法分析

1.jpg2. 语法分析

2.jpg

3. 代码生成

image.png

1.2 理解作用域

理解引擎、编译器、作用域

image.png

编译器如何处理 var a = 2;

image.png

总结:引擎在执行赋值操作之前会询问作用域中是否含有a这个变量,有则赋值,无则抛出异常,对编译器来说,遇到var a则会先询问作用域中是否有a,是则继续,无则让作用域在当前作用域的集合中声明一个新的变量,并命名为a。

准确理解LHS查询和RHS查询

LHS指的是赋值操作的目标是谁 RHS指的是赋值操作的源头

image.png


1.3 作用域嵌套

作用域有向上查找的规则

image.png

1.4 异常

区分LHS查询和RHS查询是一件很重要的事情

  • RHS查询如果从下到上一直找到全局作用域都找不到的情况下,会抛出异常。
  • LHS查询如果从下到上一直找到全局作用域都找不到的情况下,全局作用域就会创建一个具有该名称的变量。(非严格模式下)

1.5 小结

作用域的概念

作用域是一套规则,用于确定在何处以及如何查找变量。

image.png

相关文章
|
18天前
|
JavaScript 前端开发
js变量的作用域、作用域链、数据类型和转换应用案例
【4月更文挑战第27天】JavaScript 中变量有全局和局部作用域,全局变量在所有地方可访问,局部变量只限其定义的代码块。作用域链允许变量在当前块未定义时向上搜索父级作用域。语言支持多种数据类型,如字符串、数字、布尔值,可通过 `typeof` 检查类型。转换数据类型用 `parseInt` 或 `parseFloat`,将字符串转为数值。
18 1
|
18天前
|
存储 JavaScript 前端开发
解释 JavaScript 中的作用域和作用域链的概念。
【4月更文挑战第4天】JavaScript作用域定义了变量和函数的可见范围,静态决定于编码时。每个函数作为对象拥有`scope`属性,关联运行期上下文集合。执行上下文在函数执行时创建,定义执行环境,每次调用函数都会生成独特上下文。作用域链是按层级组织的作用域集合,自内向外查找变量。变量查找遵循从当前执行上下文到全局上下文的顺序,若找不到则抛出异常。
22 6
|
18天前
|
JavaScript
作用域和作用域链(js的问题)
作用域和作用域链(js的问题)
|
18天前
|
自然语言处理 JavaScript 前端开发
深入理解JS的执行上下文、词法作用域和闭包(中)
深入理解JS的执行上下文、词法作用域和闭包(中)
|
18天前
|
存储 自然语言处理 JavaScript
深入理解JS的执行上下文、词法作用域和闭包(上)
深入理解JS的执行上下文、词法作用域和闭包(上)
|
17天前
|
JavaScript 前端开发
JavaScript 闭包:让你更深入了解函数和作用域
JavaScript 闭包:让你更深入了解函数和作用域
|
16天前
|
JavaScript 前端开发
JavaScript 作用域详解:如何影响变量生命周期
JavaScript 作用域详解:如何影响变量生命周期
|
18天前
|
自然语言处理 JavaScript 前端开发
【JavaScript技术专栏】深入理解JavaScript作用域与闭包
【4月更文挑战第30天】了解JavaScript的关键在于掌握作用域和闭包。作用域决定变量和函数的可访问范围,分为全局(在`window`或`global`对象中)和局部(函数内部)。闭包则允许函数访问其创建时的作用域,即使在其他地方调用。它通过作用域链保存对外部变量的引用,常用于实现私有变量、模块化和柯里化。然而,不当使用闭包可能导致内存泄漏和性能下降。理解这些概念能提升代码质量,但也需谨慎处理潜在问题。
|
18天前
|
JavaScript 前端开发
JavaScript 作用域
JavaScript 作用域
|
18天前
|
JavaScript 前端开发 安全