zoukankan      html  css  js  c++  java
  • FuncClosure闭包函数

    FuncClosure闭包函数

    对于闭包,无论是哪个语言都有,这玩意给在玩js时候,给我的印象就是他的局部变量不消失。那我们来看看大神的想法:

    闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁

    首先我们实现一个简单的闭包

    package closure
    
    import (
    	"fmt"
    )
    
    func ClosureBase() func(x1 int, x2 int) int {
    	i := 0
    	return func(x1 int, x2 int) int {
    		i++
    		fmt.Println("此时闭包里面的i的值:", i)
    		sum := i + x1 + x2
    		return sum
    	}
    }
    

    随后,我们进行函数测试

    package closure
    
    import (
    	"fmt"
    	"testing"
    )
    
    func TestClosureBase(t *testing.T) {
    	fmt.Println("---------f1函数测试-----------------")
    	f1 := ClosureBase()
    	fmt.Println(f1(1, 1))
    	fmt.Println(f1(1, 1))
    	fmt.Println(f1(1, 1))
    
    	fmt.Println("------------------f2函数测试---------------")
    	f2 := ClosureBase()
    	fmt.Println(f2(1, 1))
    	fmt.Println(f2(1, 1))
    	fmt.Println(f2(1, 1))
    }
    

    测试输出

    我是tmp
    此时闭包里面的i的值: 1
    3
    此时闭包里面的i的值: 2
    4
    此时闭包里面的i的值: 3
    5
    ------------------f2函数测试---------------
    我是tmp
    此时闭包里面的i的值: 1
    3
    此时闭包里面的i的值: 2
    4
    此时闭包里面的i的值: 3
    5
    
    1. Go闭包的小结:闭包基本上就是上边的函数这样,函数内部引用了变量,无非就是作用域的问题。

    2. 注意:注意tmp的输出,你会发现函数第二次就不经过它了(尤其是这种边缘化的细节,笔试就喜欢这些)

    闭包应用

    对于斐波那切数列,我们总是用递归玩,下面我们就用闭包看看如何

    菲波那切数列实现

    代码实现

    package closure
    
    import "fmt"
    
    func Fbi() func() int {
    	fmt.Println("函数经过跑下面这俩了吗")
    	b0 := 0
    	b1 := 1
    	return func() int {
    		tmp := b0 + b1
    		b0  = b1
    		b1 = tmp
    		return b1
    	}
    }
    

    测试代码

    func TestFbi(t *testing.T) {
    	fmt.Println("斐波那切数列,非递归")
    	f := Fbi()
    	for i := 1; i <= 4; i++ {
    		fmt.Println(f())
    	}
    }
    

    输出结果

    斐波那切数列,非递归
    函数经过跑下面这俩了吗
    1
    2
    3
    5
    
  • 相关阅读:
    JavaEE开发中系列总结
    equals及==问题
    eclipse debug弹出窗
    MacOS Sierra 显示隐藏文件命令
    了解点Excel VBA 代码,让工作效率提升多倍~
    PADS Layout进行eco对比更新
    PCB走线规则与一些技巧介绍
    旁路电容与去耦电容的区别
    Flash download failed-Cortex-M3的原因及解决办法
    Keil U5不能识别DAP仿真器的解决办法及原因
  • 原文地址:https://www.cnblogs.com/maomaomaoge/p/14129376.html
Copyright © 2011-2022 走看看