先举例再解释官方解释:所谓的“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这戏变量也是该表达式的一部分。
function a(){
var i=0;
function b(){
console.log(++i);
document.write(""+i+"");
}
return b;
}
$(function(){
var c=a();
c();
c();
c();
//a(); //不会有信息输出
document.write("=============");
var c2=a();
c2();
c2();
});
简单描述
Golang闭包 简单例子1.函数体内嵌套另一个函数,并且返回值是函数体。
2.主函数体内的子函数被主题函数外变量引用时,就创建一个闭包。
3.不同的变量引用各自调用没有关系。
4.闭包函数不会被GC(垃圾回收机制)回收所占用资源,因此会出现外部调用时会接着上次调用的结果。
5.python实现闭包函数就是生成器generator,next()迭代生成器。
类似javascript闭包。
package main
import "fmt"
func a() func() int {
i := 0
b := func() int {
i++
fmt.Println(i)
return i
}
return b
}
func main() {
c := a()
c()
c()
c()
c()
a() // 不会输出i
}
输出结果
1
2
3
返回2个闭包的例子
package main
import "fmt"
func test01(base int) (func(int) int, func(int) int) {
// 定义2个函数,并返回
// 相加
add := func(i int) int {
base += i
return base
}
// 相减
sub := func(i int) int {
base -= i
return base
}
// 返回
return add, sub
}
func main() {
f1, f2 := test01(10)
// base一直是没有消掉
fmt.Println(f1(1), f2(2))
// 此时base是9
fmt.Println(f1(3), f2(4))
}
结果输出
11 9
12 8
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)