作用域与闭包的学习
閉包,一言以蔽之,就是函數和作用域鏈,通俗點就是函數內部使用了外面定義的變量。
我們從一個例子說起:
最后的結果,控制臺會輸出a+b的值,也就是5。
在這段代碼里,出現了閉包,bar()就是函數,bar引用了外面定義的變量a和b。
那么作用域鏈又是什么呢?
來個官方解釋:(紅寶書)
這些東西看起來好像很難理解。我們先從執行環境這個概念開始解釋。
執行環境(有時也稱作環境)定義了變量或函數有權訪問的其他數據,決定了它們各自的行為。
比如說上面的例子中,共有三個執行環境:
bar的局部環境中,沒有變量,但是它可以訪問foo的局部環境中的變量a和b。
但是在全局環境中不能直接訪問foo的局部環境中的變量a和b。因為全局環境是foo局部環境的父執行環境。
最后我們再來看作用域鏈
下圖可以形象地表示上面例子的作用域鏈
圖中的矩形表示特定的執行環境。內部環境可以通過作用域鏈訪問所有的外部環境,但外部環境不能訪問內部環境的任何變量或函數。這些環境之間是有次序的。每個環境可以向外搜索,但反之不行。
總結
- 上一篇: redis中的五种基本的数据结构
- 下一篇: 网络工程师成长日记421-某银行技术支持