JavaScript闭包

什么是闭包

在JavaScript中局部作用域可以访问全局作用域的变量,全局作用域不允许访问私有作用域的变量,使用闭包可以让函数外部作用域拿到函数内部作用域的私有变量。

     function fn(){
        var a = 5;
    }

	console.log(a);    // a is not defined

这里我们可以看到,在函数外部是拿不到函数内部的变量a,因为变量a是私有变量,如果我们需要拿到函数内部的私有变量需要使用闭包。

    var fn2 = (function () {
        var a = 5;
         function fn1() {
            return a;
        }
        return fn1;
    })();

    console.log(fn2());  //5

首先使用了匿名函数自调用将函数内部的fn1函数作为返回值赋值给了变量fn2,然后在函数外部调用变量fn2就可以拿到函数内部的私有变量。

优点

  1. 使用闭包可以减少全局污染,命名重复的冲突。
  2. 还可以延长的函数内部私有变量的生命周期。
  3. 加强了封装性,对变量达到更有效的保护。

缺点

会让函数内部的变量保持在内存中,这样使内存的消耗大,还有可能会导致内存泄漏。
需要在退出函数之前,将不使用的局部变量全部删除。手动释放闭包内的变量来解决问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值