JS中的闭包

什么是闭包

  • JS中,函数会产生闭包;闭包是函数本身该函数声明时所处的环境状态的组合。
  • 函数能够“记忆住”其定义时所处的环境,即使函数不再其定义的环境中被调用,也能访问定义时所处环境的变量;
  • 在JS中,每次创建函数时都会创建闭包
  • 但,闭包特性往往需要将函数“换一个地方”执行,才能被观察出来;
  • 闭包允许我们将数据与操作该数据的函数关联起来
// 创建一个函数
function fun() {
    // 定义一个局部变量
    var name = '哈哈哈';
    function innerfun() {
        alert(name);
    }
    // 返回一个局部函数
    return innerfun;
}
// 调用外部函数,就能得到内部函数,用变量inn来接收内部函数innerfun()
var inn = fun();
// 执行inn函数,就相当于在fun函数的外部,执行了内部函数
inn();

功能:记忆性、模拟私有变量;

记忆性

当闭包产生时,函数所处环境的状态会始终保持在内存中,不会在外层函数调用后被自动清除

function createCheckTemp(standardTemp) {
    function checkTemp(n) {
        if (n <= standardTemp) {
            alert('你的体温正常');
        } else {
            alert('你的体温偏高'); 
        }
    }
    return checkTemp;
}
// 创建一个checkTemp函数, 它以37.1度为标准线
var checkTemp_A = createCheckTemp(37.1);
// 再创建一个checkTemp函数, 它以37.3度为标准线
var checkTemp_B = createCheckTemp(37.3);
checkTemp_A(37.2);
checkTemp_B(37.2);
checkTemp_A(37.0);
checkTemp_B(37.8);

模拟私有变量

// 封装一个函数,这个函数的功能就是私有化变量
function fun() {
    // 定义一个局部变量a
    var a = 0;
    return {
        getA: function(){
            return a;
        },
        add: function(){
            a++;
        },
        pow: function(){
            a *= 2;
        }
    };
}
var obj = fun();
// 如果想在fun函数外面使用变量a,唯一的方法就是调用getA()方法
console.log(obj.getA());
obj.add();
obj.add();
obj.add();
console.log(obj.getA());
obj.pow();
console.log(obj.getA());

使用闭包的注意点

不能滥用闭包,否则会造成网页的性能问题,严重时可能导致内存泄漏。所谓内存泄漏是指程序中已动态分配的内存由于某种原因未释放或无法释放;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值