闭包函数

闭包函数

一、什么是闭包

闭包:通过调用含有一个内部函数加上该外部函数持有的外部局部变量(upvalue)的外部函数产生的一个实例函数。
闭包组成:外部函数+外部函数创建的upvalue+内部函数(闭包函数)

二、如何形成闭包

脚本程序设计语言(ECMAScript)允许使用内部函数--即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

三、闭包的实现

1、内部函数可以访问外部函数中的变量(即upvalue)
2、在创建出来的内部函数变量仍存在时,被其访问的外部函数中的变量不被释放

--lua
function newCounter()
	local i = 0 --外部函数的变量
 	return function()
		 i = i + 1  --引用了外部函数的变量
  		return i 
 	end 
end 

C++

//C++
#include <iostream>
#include <functional>

std::function<int()> make_my_closure(int x){
    return [x]() mutable {   
        ++x;
        return x;   
    };
}

int main()
{
    auto my_f = make_my_closure(10);

    std::cout << my_f() << std::endl; // 11
    std::cout << my_f() << std::endl; // 12
    std::cout << my_f() << std::endl; // 13

     auto my_f1 = make_my_closure(1);

    std::cout << my_f1() << std::endl; // 2
    std::cout << my_f1() << std::endl; // 3
    std::cout << my_f1() << std::endl; // 4
}

四、闭包的优缺点
优点

1.保护函数内的变量安全,加强了封装性
2.在内存中维持一个变量。

缺点

    常驻内存,会增大内存使用量,使用不当很容易造成内存泄露

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值