javaScript闭包原理详解

    闭包是 JavaScript 最强大的一个方面,它允许函数访问局部范围之外的数据。

举例1:

    function person () {
        var name = '老王';
        var age = 20;
        return {
            getName: function () {
                return name;
            },
            getAge: function () {
                return age;
            }
        }
    }
    var p1 = person();
    console.log(p1.getName());//'老王'
    console.log(p1.getAge());//20

    上面函数person就是一个闭包的简单实现,可以通过函数getName、getAge访问函数person局部变量name、age。有些人可能会感到奇怪,局部变量在函数执行完成之后不是会释放掉吗?通常,一个函数的激活对象与运行期上下文一同销毁。当涉及闭包时,激活对象就无法销毁了,因为引用仍然存在于闭包的作用域属性中。上面函数person局部变量name,age存在闭包函数getName、getAge对其引用,所以name,age不会立即释放掉。

    经过一个简单的闭包讲解,现在写一个稍微复杂的闭包。

举例2:

 function method () {
        var msg1 = '我是method函数局部变量';
        return function () {
            var msg2 = '我是匿名函数局部变量';
            return {
                msg1:msg1,
                msg2:msg2
            }
        }
    }
    var m = method()();
    console.log('msg1:' + m.msg1,'msg2:' + m.msg2);
    //msg1:我是method函数局部变量 msg2:我是匿名函数局部变量

    上面函数method返回一个匿名函数,匿名函数存在对method局部变量msg1的引用,所以函数method执行完成局部变量msg1不会释放,知道执行完匿名函数msg1才被释放。

    通过上面的闭包原理,我们成功获取到了局部变量msg1。

转载于:https://www.cnblogs.com/xt911129/articles/5412144.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值