1. 程式人生 > >什麼是閉包,閉包的作用與好處是什麼,何時使用閉包,對閉包的改進

什麼是閉包,閉包的作用與好處是什麼,何時使用閉包,對閉包的改進

   閉包:外部函式定義的內部函式就是閉包。
   閉包的作用及好處:閉包給訪問外部函式定義的內部變數創造了條件。也將關於函式的一切封閉到了函式內部,減少了全域性變數,這也是閉包的真實含義。
   與普通函式的區別:
   1,普通函式也能曝光內部的值。方法A定義全域性變數,但佔用的記憶體無法釋放且函式使用的變數定義到了函式外部不便於理解和管理。方法B將內部變數當引數傳遞,此種方法不美觀太醜陋。
   2,函式每次執行時都會且只會初始化其內部變數,導致了閉包與普通函式的最大區別。就是每次呼叫普通函式時它內部都被初始化成一致狀態,導致執行的結果是一致的。閉包不同,它的本質是內部函式,呼叫閉包只會初始化內部函式變數,外部函式的變數沒有被初始化,實現了變數值的傳遞。外部函式只在定義閉包時被初始化。閉包消亡時記憶體被回收。
   什麼時候需要使用閉包:
   當每次呼叫函式A
時都要改變全域性變數B,且B只與A有關。以往沒有閉包時只能將B定義為全域性變數,現在可以將B定義為A的內部變數,同時在A內部定義閉包C,並將C當值返回。 思考及改進:golang中定義使用閉包有些反人類。所有一切問題的本質在於上面變數B的作用域和生存期的問題,可以有更簡便的解決辦法。比如啟用關鍵字init, init B int 如此定義後只對B初始化一次,生存期和作用域為所在函式。如此改進後就不再需要閉包的概念了! 此功能必將在未來的版本中實現,特立此貼為證!!!