在此程式碼中,我們建立了兩個for 迴圈(loop1 和Loop2),它們迭代一段字串(cmd )。但是,這些循環的結果輸出有所不同。
在循環 1 中,迭代 cmd 後,會建立一個映射(操作),其中每個命令都對應到一個函數,該函數列印命令。當這些函數執行時,它們都會列印“update”,這是 cmds 中的最後一個元素。
在loop2中,採用了類似的方法,但不是儲存操作映射中的直接命令引用,使用其索引建立命令的副本。這確保每個函數都有自己的命令副本,從而防止loop1出現意外的「更新」輸出。
loop1中的特殊行為是由於閉包(儲存在中的函數)的方式而發生的actions map)引用循環變數。
透過為每個函數建立循環變數的副本(如loop2中所做的那樣),每個函數都有自己的獨立變量,該變數不受後續循環的影響
這個範例強調了Golang 中變數作用域的重要性以及循環變數和複製所建立的分離變數之間的差異。當使用引用循環變數的閉包時,請確保建立副本以防止因變數重複使用而導致的意外行為至關重要。
以上是為什麼 Golang 的 For 迴圈在使用閉包時會產生不同的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!