【前端圭臬】十一:从规范看 JavaScript 执行上下文(下)

本文详细探讨了JavaScript中的执行上下文,重点分析了闭包和this机制。从规范角度,闭包被视为函数对象,而在引擎实现中,闭包是内部函数访问外层变量形成的作用域。在工程实践中,闭包特指被返回并访问外层变量的内部函数。至于this,其基本作用是允许对象方法访问自身变量,其指向取决于调用方式。文章指出,this的默认全局指向和无法从外层执行上下文继承是主要缺陷,并介绍了如何通过call、bind和apply设置this值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这篇文章我们接着看执行上下文,主要是 JS 中的闭包和 this 机制两个部分。虽然我们还是从规范出发,但其实这两个东西的概念规范里提的都不多,实际应用起来水又很深,容易把握不住,所以这一篇更多的是举例说明。

1 JavaScript 中的闭包

1.1 规范中的闭包

闭包(closure)这个名词用于计算机中,最初的含义是 “用于描述 λ 表达式和其执行环境的一系列信息”。考虑到当时盛行基于 λ 演算的函数式编程语言,λ 表达式其实可以引申为今天我们所说的 “函数”。

不同于其它语言,JavaScript 的函数在定义上就包含一个 [[Environment]] 字段,其实就是函数执行时的 外层词法环境,那么把闭包的经典定义套用到 JavaScript 上,对应的其实就是 JavaScript 函数对象 本身。

然而,JavaScript 工程师口中的闭包与规范中的闭包概念并不相同。

1.2 工程实践中的闭包

我们先从一段代码着手分析:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evan-Nightly

劝君上当,上当一回

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值