當前位置: 華文星空 > 知識

關於閉包的套用例項,這種描述與命名是否更加貼切?

2022-09-23知識

「閉包」是個很學術性的概念,在每個程式語言裏閉包的含義可能都有差異,尤其是在 JavaScript 裏,規範文件列根本沒有直接給閉包下過定義,所以可以認為閉包完全不存在。

前段時間有人問 JavaScript 之父 」每個 JavaScript 函數都是閉包」 的說法到底對不對 https:// twitter.com/BrendanEich /status/1376546443847102465 (要梯子)。JavaScript 之父給解釋了很多(面試題都回答,果然是最接地氣的程式語言之父),具體怎麽解釋的我就不轉譯了,總之他也覺得閉包這個概念並不是非得提的東西,最後還建議那個人把 MDN 上講閉包的概念刪了得了。

其實從口頭上,JavaScript 之父是把巢狀函數認為是閉包的,比如 15 年說的這句

以及早期 SpiderMonkey 程式碼裏的他寫的註釋:

現在我們覺得能存取上層作用域裏的變量的函數太正常不過了,但在當時,是一個新特性,之前只有全域的頂層函數,頂層函數裏只能存取自己的本地變量和全域變量,沒有上層作用域一說。

如今這個年代,既然我們寫的大部份函數都是閉包,那面試還問啥閉包,幹脆不要問了。