Golang 的 Defer 語句中的閉包捕獲
Golang 的 defer 語句允許在函數返回後執行清理操作。然而,與大多數語言不同的是,defer 建立的閉包不會捕捉周圍函數中變數的當前狀態,而是在執行 defer 語句時對它們進行求值。
理解第2 部分與第2 部分3
在給定的程式碼中,第2 部分和第3 部分之間的區別在於閉包如何捕獲變數i。
第 2 部分:
在第 2 部分中,閉包直接捕獲變數 i。當閉包中的程式碼執行時(循環完成後),i 的值由循環的最終迭代決定,即 4。這就是為什麼第 2 部分輸出「44444」。
第3 部分:
在第3 部分中,閉包不會直接捕獲i,而是建立一個新變數n,並在defer語句執行時為其賦值i 的值。由於 defer 語句針對迴圈的每次迭代執行,因此每個閉包都有不同的 n 值。這會導致輸出“43210”。
關鍵點:
要記住的關鍵概念是,當 defer 時,defer 中的閉包內的程式碼不會被執行。語句被執行。相反,用於確定閉包參數的表達式(例如,本例中的 i)在 defer 語句執行時被評估。
以上是Golang的Defer語句如何捕捉迴圈中的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!