js-闭包

  在JS中,闭包是一个重点,也是一个难点。因为闭包对像JAVA这类语言的coder会觉得很生涩难懂,对初学的js的coder(本人也是初学的菜鸟)会感到难以理解,在这根据自己对闭包的一些浅显的理解分享出来。若有不对的地方,望多多包含。

闭包

闭包,指的是在函数里的函数。(其实闭包就是被嵌套的那个函数)

function closeBag(){
    function(){} // 这个匿名函数就是一个闭包
}

了解了什么是闭包之后,来认识一下闭包的作用。

作用一:获取函数内部的局部变量并将其驻留在内存中
  在JS中有函数作用域,在函数内通过var定义的变量,外部作用域无法直接获取。既然只是外部作用域无法获取。那么,它的子作用域便可以获取到,我们想将这个局部变量返回到外部作用域,那么便可以通过闭包完成该传递。
  在这有人就会疑惑,如果只是需要获取函数内部的局部变量,直接将需要的局部变量return不就可以拿到了吗?的确,若只是需要获取局部变量,的确可以通过这种方式。但如果要实现计数功能,那么闭包使局部变量驻留在内存中的作用便显现了出来。

function closeBag2(){
        var num = 22;
        // 通过闭包将举报变量返回到外部作用域
        return function() {
            return num++;
        }
    }

    var num = closeBag2();

    console.log(num()); // 22
    console.log(num()); // 23
    console.log(num()); // 24
    console.log(num()); // 25

作用二:封闭作用域
  通过自调用函数形成一个封闭作用域(相当于JAVA的块级作用域),在该封闭作用域内,定义的变量和函数都是私有的,全局作用域并不能直接访问,但可以通过返回一个对象来获取该封闭作用域里的方法或变量。通常,我们利用这种封闭作用域来封装一些我们常用的方法库。
自调用函数写法: (function(){})()

封装库例子:
var utils = (function(){
        function add(){}
        function mul(){}
        function sub(){}

        return {
            add: add,
            mul: mul,
            sub: sub
        }
    })();

  以上是我对闭包的浅显的理解,希望有大神指出我的不足和对闭包知识点的补充,万分感谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值