我我我我终于理解闭包了,哈哈哈哈(仰天长啸)(JavaScript闭包/JS闭包理解)

想要理解闭包。首先得了解JavaScript中的三个东西。

1,函数内部可以访问的范围。

就是说,函数内部能访问,自身内部以及自身外层的变量。(这个很好理解,大部分语言都是如此)

如:

var a = 1;
function myF(){
    //这里可以访问a
}

函数f1内部有函数f2的话。

var a = 1;
function f1{
    var b = 2;
    function f2(){
        //这里可以访问a和b
    }
}

2,函数自我调用

函数在定义的同时调用自我一次,对外界不可见。外界不能再调用它了。

(funciton(){
    //要运行的代码
})();

// 带参数的自我调用函数
(function(a,b){
    //...
})(1,2)

3,JavaScript中,函数Funciton也是对象Object,可以作为返回值

function f1(){
    return f2(){};
}

var a = f1();//这样a就等于函数f1的返回值即函数f2了

//我们要运行函数f2,就可以这样:
a();

综上所述,我们想要一个变量,这个变量不能直接被访问,只能通过特定函数访问到。(有点类似于Java自私变量,只能通过get/set方法访问)。

我就需要一个自调用函数,在这个自调用函数中声明(以及初始化)这个变量x。然后再在这个自调用函数中返回一个处理变量x的函数(简称f2吧)。把自调用函数返回的函数f2返回给变量a。然后就可以通过a(),一直调用函数f2,而函数f2作为自调用函数的内部函数,可以一直访问处理自调用函数的变量x。这就是所谓的闭包。

var a = (function(){
    var x = 0;
    return function (){
        return x += 1;
    }
})();

a();    // 返回1
a();    // 返回2
a();    // 返回3

闭包是一种保护私有变量的机制。防止外界通过赋值直接去更改他或者覆盖他。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值