前言
这篇文章我们接着看执行上下文,主要是 JS 中的闭包和 this 机制两个部分。虽然我们还是从规范出发,但其实这两个东西的概念规范里提的都不多,实际应用起来水又很深,容易把握不住,所以这一篇更多的是举例说明。
1 JavaScript 中的闭包
1.1 规范中的闭包
闭包(closure)这个名词用于计算机中,最初的含义是 “用于描述 λ 表达式和其执行环境的一系列信息”。考虑到当时盛行基于 λ 演算的函数式编程语言,λ 表达式其实可以引申为今天我们所说的 “函数”。
不同于其它语言,JavaScript 的函数在定义上就包含一个 [[Environment]]
字段,其实就是函数执行时的 外层词法环境,那么把闭包的经典定义套用到 JavaScript 上,对应的其实就是 JavaScript 函数对象 本身。
然而,JavaScript 工程师口中的闭包与规范中的闭包概念并不相同。
1.2 工程实践中的闭包
我们先从一段代码着手分析: