kun*_*zor 8 go nested-function
任何人都可以解释为什么0和1打印而不是其他什么?谢谢!
func makeFunction(name string) func() {
fmt.Println("00000")
return func() {
makeFunction2("abcef")
}
}
func makeFunction2(name string) func() {
fmt.Println("11111")
return func() {
makeFunction3("safsf")
}
}
func makeFunction3(name string) func() {
fmt.Println("33333")
return func() {
fmt.Printf("444444")
}
}
func main() {
f := makeFunction("hellooo")
f()
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么0和1打印而不是其他什么?谢谢!
让我们按照程序流程:
main 开始.main电话makeFunction.makeFunction打印00000,并返回匿名函数.main,我们调用前一次调用返回的匿名函数.makeFunction2.makeFunction2打印11111,并返回匿名函数.main 回报.因为在上面的步骤6之后丢弃了返回值,所以不打印任何其他内容.
让我们看看您的main:
f := makeFunction("hellooo")
Run Code Online (Sandbox Code Playgroud)
makeFunction2("abcef"),分配给标识符ff()
Run Code Online (Sandbox Code Playgroud)
等效于:
_ = f()
Run Code Online (Sandbox Code Playgroud)
makeFunction3("safsf")将其丢弃(您未分配的返回值f())。makeFunction3 永远不会分配给任何标识符,也永远不会调用。
| 归档时间: |
|
| 查看次数: |
6088 次 |
| 最近记录: |