• go语言基础之闭包的特点


           所谓闭包就是一个函数“捕获”了和它在同一作用域的其它常量和变量。这就意味着当闭包被调用的时候,不管在程序什么地方调用,闭包能够使用这些常量或者变量。它不关心这些捕获了的变量和常量是否已经超出了作用域,所以只有闭包还在使用它,这些变量就还会存在。

    1、闭包的特点

    示例1:  函数调用完毕,x自动释放

    package main //必须
    
    import "fmt"
    
    func test01() int {
    	//函数被调用时,x才分配空间,才初始化为0
    	var x int //没有初始化,值为0
    	x++
    	return x * x  //函数调用完毕,x自动释放
    }
    
    func main() {
    	fmt.Println(test01())
    	fmt.Println(test01())
    	fmt.Println(test01())
    	fmt.Println(test01())
    
    }
    

    执行结果:

    1
    1
    1
    1
    

    2、闭包的特点 (备注:变量不会释放,还会存在)

    //返回值为一个匿名函数,返回一个函数类型,通过f来调用返回的匿名函数,f来调用闭包函数
    //它不关心这些捕获了的变量和常量是否已经超出了作用域
    //所以只有闭包还在使用它,这些变量就还会存在。

    示例2:

    package main //必须
    
    import "fmt"
    
    //函数的返回值是一个匿名函数,返回一个函数类型
    func test02() func() int {
    	var x int  //没有初始化,值为0
    
    	return func() int {
    		x++
    		return x * x
    	}
    }
    
    func main() {
    	//返回值为一个匿名函数,返回一个函数类型,通过f来调用返回的匿名函数,f来调用闭包函数
    	//它不关心这些捕获了的变量和常量是否已经超出了作用域
    	//所以只有闭包还在使用它,这些变量就还会存在。
    	f := test02()
    	fmt.Println(f())
    	fmt.Println(f())
    	fmt.Println(f())
    	fmt.Println(f())
    	fmt.Println(f())
    }
    

    执行结果:

    1
    4
    9
    16
    25
    

      

  • 相关阅读:
    SQL server使用
    NCC 事务
    springboot学习
    容器
    x86汇编
    git之.gitignore文件用途
    Linux系统安装之U盘引导
    使用异步I/O大大提高应用程序的性能
    Python3.5 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”?(转载)
    python之正则表达式
  • 原文地址:https://www.cnblogs.com/nulige/p/10232893.html
Copyright © 2020-2023  润新知