《你不知道的JavaScript 上卷》笔记 (每天更新)
2021/12/1 17:06:49
本文主要是介绍《你不知道的JavaScript 上卷》笔记 (每天更新),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第一章 作用域是什么
作用域:用来存储变量,并且之后可以方便地找到这些变量
JS 代码片段:编译 -> 执行
- 引擎:负责 JS 程序的编译及执行过程
- 编译器:负责 语法分析、代码生成
- 作用域:负责 收集并维护由所有标识符(变量)组成的一系列查询,并确定当前执行的代码对这些标识符的访问权限
在JS中所有的可以由我们自主命名的都可以称为是标识符.例如:变量名、函数名、属性名都属于标识符
var a = 2 /* 变量的赋值操作会执行两个动作: 首先,编译器会在当前作用域中声明一个变量(如果之前没有声明过) 然后在运行时引擎会在作用域中查找该变量(查找的过程由作用域协助),如果能够找到就会对它赋值 */
但是,引擎进行怎样的查找,会影响最终的查找结果:
RHS 查询:仅查找某个变量的值
LHS 查询:找到变量的容器本身
深入研究考虑一下代码:
a = 2; // 这里对a的引用是 LHS 引用,因为实际上我们并不关心当前的值是什么,只是想要为 =2 这个赋值操作找到一个目标 console.log(a); // 对a的引用是一个 RHS 引用,因为这里a并没有赋予任何值。相应地,需要查找并取到a的值,这样才能将值传递给 console.log(...)
在概念上最好理解为:
赋值操作的目标是谁(LHS)
谁是赋值操作的源头(RHS)
下面的程序既有 LHS 也有 RHS 引用
function foo(a) { console.log(a); // 2 } foo(2);
最后一行 foo(...)
函数的调用 需要对 foo 进行 RHS 引用,意思是:去找 foo 的值,并把它给我
并且 (...)
意味着 foo 的值需要被执行,因此它最好真的是一个函数类型的值!
代码中还有隐式的 a = 2 操作,发生在 2 被当作参数传递给 foo(...)
函数时,2 会被分配给参数a。为了给参数a(隐式地)分配值,需要进行一次 LHS 查询
这里还有对 a 进行的 RHS 引用,并且将得到的值传给了 console.log(...)
console.log(...) 本身也需要一个引用才能执行,因此会对 console 对象进行 RHS 查询,并且检查得到的值中是否有一个叫做 log 的方法
最后,在概念上可以理解为在 LHS 和 RHS 之间通过对值2进行交互来将其传递进log(...)
TEST
function foo(a) { var b = a; return a + b; } var c = foo(2);
1.找出其中所有的 LHS 查询(3处)
c = .. // c = foo(2) a = 2 b = .. // b = a;
2.找出其中所有的 RHS 查询(4处)
foo(2.. // foo(2) = a; // b = a a .. // a + b .. b // a + b
这篇关于《你不知道的JavaScript 上卷》笔记 (每天更新)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26网络攻防资料入门教程
- 2024-12-26SQL注入资料详解:入门必读教程
- 2024-12-26初学者指南:数据库服务漏洞项目实战
- 2024-12-26网络安全项目实战:新手入门指南
- 2024-12-26网络攻防项目实战入门教程
- 2024-12-26信息安全项目实战:从入门到初步应用
- 2024-12-26SQL注入项目实战:初学者指南
- 2024-12-26Web安全项目实战:新手入门教程
- 2024-12-26Web攻防项目实战:新手入门教程
- 2024-12-26Web漏洞攻防项目实战入门教程