初识闭包

写文章之前,查阅了很多的资料,也看了很多大牛对闭包的解释,现在总算是对闭包有了一定的理解。

作用域

可能你会问:明明是讲闭包,为什么又讲作用域了? 在理解闭包之前我们首先要明白JavaScript中变量作用域的概念,我们都知道JavaScript的变量分为局部变量和全局变量,比如:

var global = 1;

function f1() {
    var local = 2;
    console.log(global )    // 1
    console.log(local)    // 2
}

console.log(global )    // 1
console.log(local)    // local is not defined

在上面示例中global是全局变量,因此可以在任何地方访问它,而local是定义在函数f1()中的局部变量,因此只能在f1()中访问。那么如果我们要访问f1()中的local该怎么办呢? 这个时候就需要引入闭包了。

闭包的概念

现在我们来说什么是闭包,我所理解的闭包就是就是可以访问其他函数内部的函数。同样像前面的例子,我们现在就用闭包来实现在函数外部访问local变量

function f1() {
    var local = 2;
    function bar() {
        console.log(local++)
    }
    return bar
}

var func = f1();
func();    // 2
func();    // 3

这个时候我们相当于通过函数bar()间接的访问到了函数f1()中的局部变量local,因此在func()第一次执行的时候我们得到local=2,但是为什么第二次调用func()得到的local却等于3呢? 按理说我第二次调用func()应该是从f1()中的第一句 var local = 2 开始执行啊。这就涉及闭包的另一个作用了。

闭包的作用

闭包除了能访问函数内部的局部变量,还有一个作用就是将函数内部的变量值储存到内存中。

在上面的示例中,f1()的返回值是bar()函数,我们调用func()的时候其实就是在调用bar(), 而bar()定义在f1内部,是依赖f1()而存在的,因此调用bar时将f1()中的local变量放入了内存中,在第二次调用的时候自然也就从内存中得到了local++后的值。

本文参考文章:http://www.cnblogs.com/cxying... http://www.ruanyifeng.com/blo...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值