轉自https://blog.csdn.net/tbc123tbc/article/details/78948576 安全
這裏主要是描述我在學習過程當中遇到的困惑。起初把函數單獨寫出來,想用普通函數那種寫好後再去main方法中調用,總是報錯。以下圖:
真正的使用方法,要深入體會匿名函數的原因,它只是爲了少數的幾回調用,又不想命名太多形成命名衝突,就使用一邊構造函數一邊使用的狀況,不能單獨脫離調用來構造。
1-聲明一個匿名函數閉包
func(參數列表) 返回值列表 {app
}函數
2-匿名函數的調用學習
程序輸出:spa
2.一個綜合性的例子(閉包)——Go的匿名函數是一個閉包.net
程序輸出:3d
在上面的例子中,變量a指向的閉包函數引用了局部變量i和j,i的值被隔離,在閉包外不能被修改,改變j的值之後,再次調用a,發現結果是修改過的值。
在變量a指向的閉包函數中,只有內部的匿名函數才能訪問變量i,而沒法經過其餘途徑訪問到,所以保證了i的安全性。
補充說明一下《閉包》的相關知識以下三個方面說:code
(1)基本概念
閉包是能夠包含自由(未綁定到特定對象)變量的代碼塊,這些變量不在這個代碼塊內或者任何全局上下文中定義,而是在定義代碼塊的環境中定義。要執行的代碼塊(因爲自由變量包含在代碼塊中,因此這些自由變量以及它們引 用的對象沒有被釋放)爲自由變量提供綁定的計算環境(做用域)。
(2)閉包的意義
閉包的價值在於能夠做爲函數對象或者匿名函數,對於類型系統而言,這意味着不只要表示數據還要表示代碼。支持閉包的多數語言都將函數做爲第一級對象,就是說這些函數能夠存儲到變量中做爲參數傳遞給其餘函數,最重要的 是可以被函數動態建立和返回。
(3)GO語言中使用閉包
Go語言中的閉包一樣也會引用到函數外的變量。閉包的實現確保只要閉包還被使用,那麼被閉包引用的變量會一直存在。orm