'闭锁'的定义

Iva*_*van 6 javascript closures

我问一个问题.它是关于JavaScript的闭包,而不是它们如何工作.

David Flanagan在他的"JavaScript The Definitive Guide 6th Edition"中写道:

... 从技术上讲,所有JavaScript函数都是闭包:它们是对象,并且它们具有与之关联的作用域链....

它是否正确?我可以将每个函数(函数对象+它的作用域)称为"闭包"吗?

堆栈'标签'封闭'说:

闭包是一个第一类函数,它引用(关闭)变量来自定义它的作用域.如果闭包在其定义范围结束后仍然存在,则它关闭的变量也将继续存在.

在JavaScript中,每个函数都引用来自定义它的范围的变量.所以,它仍然有效.

问题是: 为什么许多开发人员会这样想?这个理论有问题吗?它不能用作一般定义吗?

Bar*_*mar 2

从技术上讲,所有函数都是闭包。但如果函数没有引用任何自由变量,则闭包的环境为空。仅当存在需要与函数代码一起保存的封闭变量时,函数和闭包之间的区别才有意义。因此,通常将不访问任何自由变量的函数称为函数,而将访问任何自由变量的函数称为闭包,以便您了解这种区别。