Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
289 views
in Technique[技术] by (71.8m points)

JavaScript: 块作用域是函数作用域的子集?望得到解答.

插图中来自红宝书第四版的一小段:(第26页)
image.png
image.png
(图中分别是中英的版本,我都有认真去看)

如图是正在看红宝书第四版的一小段,这里说:

块作用域是函数作用域的子集
Block scope is strictly a subset of function scope

这句话的从集合的角度来看,其实可以理解成:所有的块作用域都是函数作用域.

这句话是否有错误?
let无论是在函数作用域或块级作用域的外部都是无法访问的.而var在函数作用域外部无法访问,在块级作用域外部是可以访问的.

假设这句话是正确的,表明var在块级作用域外部也是无法访问的.这显然跟前面的矛盾了.

因此,我认为应该是作者的笔误了,应该调转过来才对:
函数作用域是块作用域的子集.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

没有问题。你对子集的理解上有偏差。

偶数是整数的子集,但偶数都能被2整除,整数集合并不符合这个特征。子集符合的特征,超集一定要符合吗?

人是动物的子集,但是人可以有比动物更具体更特有的功能,这个算不算矛盾?

块级作用域是函数作用域的子集,这里说的是,函数作用域的要求块级作用域都符合,但是块级作用域可以有自己特有的更严苛的要求。

关键点在于这里所谓的集合, 它的元素到底是什么。并不是说子集符合的特征,超集都要符合,而是说,子集里有的元素,超集都有。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.6k users

...