mtq558
mtq558
2021-01-27 22:28

逻辑我能懂为啥我的执行结果跟分析不一样呢!~

  • Golang
package main

import (
	"fmt"
)

func Addup() func (int) int{

	var n int =10
	var str string = "Hello"

	return func(x int)int{   //返回值是一个匿名函数,那么n和这个retur构成了一个闭包~,形成一个整体。
		n = n + x
		str += string(x)    //自加一下x
		fmt.Println("str=",str)
		return n          // 这个n 会因为调用 一直在改变值
	}
}


func main(){

		f:= Addup()
    // 因为反复调用~初始化一次,然后不断的在改变值,所以才有下面的这个结果。!!!!
		fmt.Println(f(1))   //11
		fmt.Println(f(2))   //13
		fmt.Println(f(3))   //16

	
}

理论上,结果应该是

str=hello1(ASCII码那个)

11

str=hello12

13

str=hello123

16

但是我的执行结果是:

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

0条回答