2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
問題是您在調(diào)用時(shí)首先將 i 分配給 15closure1()然后關(guān)閉兩個(gè)您打印它..您closure1() 在將 i 分配給 20后所做的.. 這就是問題所在,這應(yīng)該可以解決您的問題:
package main
import "fmt"
func main() {
i := 10
closure1 := func() {
fmt.Printf("closure, i: %d\n", i)
i = 15
}
closure1()
fmt.Printf("in main, i: %d\n", i)
closure2 := func(x int) {
fmt.Printf("function call, pass parameter, i: %d\n", x)
}
closure1()
i = 20 // Now it assigns it back to 20.. So the result below will become 20...
closure2(i)
}
你看到你的問題了嗎?

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
closure1 的最后一行將 i 設(shè)置為 15。這個(gè) i 屬于 main() 上下文。
main 的最后一行再次調(diào)用closure1()。所以 main 中的 i 再次設(shè)置為 15。
- 2 回答
- 0 關(guān)注
- 146 瀏覽
添加回答
舉報(bào)