编程语言-闭包-浅析

在编程语言中,闭包是十分常见的结构,在有函数类型的编程语言中,闭包基本上必不可少。但很多人并不理解,我就基于go语言浅析一下,希望可以帮助到大家。

这是一个显而易见的闭包结构,看定义函数test(),返回值是一个函数,并且返回值函数中的变量引用了test()中的变量a,再看主函数main() 利用test()生成函数func1,当我们调用func1,明显结果为1,如图所示

 当我们再次调用func1,猜猜结果为多少(建议先思考,再看答案)

 让我们看看结果

 答案是2,答对了没有,我们发现,函数再次调用时,a的值是紧接着上一次的值运行的,而不是一般函数的初始化,让我们想到了什么,是不是全局变量

 

观察发现, 果然和全局变量很类似,所以,我个人认为,闭包结构就是一个带有返回函数的函数,当函数返回时,把函数和引用的局部变量一同返回,返回的变量相当于全局变量,当我们再次调用时,紧接着上次的值运行,那有的小伙伴就又会分析,那有为啥要使用闭包结构呢,很显然,

当我们需要调用函数时某个参数,需要紧接着上一次的值运行,如当我们需要函数统计的次数时,我们初学者就很容易想到刚刚这段代码

但是其实这有明显的缺陷,因为全局变量时公共的,如果其它函数不规范,很容易受到影响,

我们发现

 

很显然,a的值受到干扰

但是当我们使用闭包

 

 

结果如下

我们发现test1()和test2()都是闭包返回的函数,但是它们的值互不干扰,或者说,有参数的私密性,不会受到其它函数的影响,js中闭包结构更是频繁出现,大家可以试着分析分析

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值