你并不了解 JavaScript:开始 - 第二版 - 第四章:大局观

第四章:大局观

本书概述了你在入门 JS 时需要注意的事项。我们的目标是填补那些刚接触 JS 的读者在早期接触该语言时可能踩的坑。我也希望我们已经暗示了足够多的更深层次的细节,以激起你的好奇心,想更多地了解这种语言。

在本系列的其他书籍中,我们将会解读语言中所有的其他特性,其详细程度远远超过我们在这里的几个简短章节中所能做到的。

不过,请记住,忙乱源于贪快。与其匆匆忙忙地去看下一本书,试图快速地读完所有的书,不如花些时间回顾一下本书的内容。再花些时间看看你当前项目中的代码,并将你所看到的与到目前为止所讨论的内容进行比较。

当你准备好了,这一章主要将 JS 语言分为三个重要组成部分,然后提供了一个简短的路线图,说明对这一系列书的其余部分的展望,以及我建议你如何前行。另外,不要跳过附录,特别是附录 B「温故而知新」。

重要组成 1: 作用域与闭包

将变量组织成作用域单位(函数、块)是任何语言最基础的特征之一;也许没有其他特征对程序的行为方式有更大的影响了。

作用域就像桶,而变量就像你放进这些桶里的弹珠。一种语言的作用域模型就像帮助你确定哪种颜色的弹珠放在哪种匹配颜色的桶里的规则。

对于作用域之间相互嵌套,任何给定的表达式或语句只有该层作用域嵌套的变量或更高/外层作用域中的变量可以被访问;较低/内层作用域中的变量将被隐藏,无法访问。

这就是作用域在大多数语言中的表现,这被称为词法作用域。作用域单元的边界,以及变量在其中的组织方式,是在程序被解析(编译)时决定的。换句话说,这是由开发者决定的:你在程序中定位一个函数/作用域的位置决定了程序中这一部分的作用域结构是什么。

JS 是词法作用域的,尽管许多人声称它不是,因为它的模型有两个特殊的特点,是其他词法作用域的语言所不具备的。

第一种通常被称为变量提升:当所有在作用域中的任何地方声明的变量都被当作在作用域的开头声明的。另一种是 var 声明的变量是函数作用域,即使它们出现在一个块内。

变量提升和函数作用域的 var 都不足以支持 JS 没有词法作用域的说法。 let/const 声明有一个特殊的错误行为,叫做「暂时性死区」 (TDZ),它导致了可观察但不可用的变量。虽然 TDZ 的出现很奇怪,但它不是词法作用域失效的证明。所有这些都是语言的独特部分,所有 JS 开发者都应该学习和理解。

当语言将函数作为头等公民时,闭包是词法作用域的自然结果

  • 41
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值