函數表達式特點
在JS編程中,函數表達式是一種非常有用的技術。使用函數表達式可以無需對函數命名,從而實現動態編程。
函數表達式的特點:
- 函數表達式不需要有名字,沒有名字的函數表達式也叫做匿名函數。
- 在無法確定如何引用函數的情況下,遞歸函數就會變得比較復雜。
- 遞歸函數應該始終使用arguments.callee來遞歸地調用自身,不要使用函數名—— 函數名可能會發生變化。
當在函數內部定義了其他函數時,就創建了閉包。閉包有權訪問包含函數內部的所有變量,原理到底是啥呢?
- 在后臺執行環境中,必報的作用域鏈包含著它自己的作用域、包含函數的作用域和全局作用域。
- 通常,函數的作用域及其所有變量都會在函數執行結束后被銷毀。
- 但是,當函數返回了一個閉包時,這個函數的作用域將會一直在內存中保存到閉包不存在為止。
使用必報可以在JS中模仿塊級作用域
- 創建并立即調用一個函數,這樣既可以執行其中的代碼,又不會在內存中留下對該函數的引用。
- 結果就是函數內部的所有變量都會被立即銷毀,除非將某些變量賦值給了外部作用域中的變量。
閉包還可以用于在對象中創建私有變量:
- 即使JS中沒有正式的私有對象屬性的概念,但可以使用閉包來實現公有辦法,而通過公有方法可以訪問在外部作用域中定義的變量。
- 有權訪問私有變量的共有辦法叫做特權方法。
- 可以使用構造函數模式、原型模式來實現自定義類型的特權方法,也可以使用模塊模式、增強的模塊模式來實現單例的特權方法。