关于我理解的闭包(一)

闭包是什么?

《js高级程序设计》这样指出:闭包是指有权访问另一个函数作用域中的变量的函数

首先它是一个函数,其次它还可以访问另一个函数作用域中的变量


看下面一个例子:

function foo(){

     var a=10;

    function bar(){

         a*=2;

     

    }

    bar();

    return a;

}


foo();//结果是20


因为bar在foo的作用域中,当执行bar()时,发现a没有在bar函数中定义,根据函数作用域,他会往上一层查找(也就是foo函数作用域)找到了a,计算并返回结果



function foo(){

    var a=10;

    function bar(){

    a*=2;

   return a;

   }

    return bar;

}

var baz=foo();

baz();//20

baz();//40

baz();//80

在上述代码中,所返回的对bar函数的引用被赋给变量baz。这个函数现在是在foo函数的外部调用,但它依然可以访问a。因为javascript中的作用域是词法性的。函数是运行在定义他们的作用域中(本例中是foo内部的作用域),而不是运行在调用他们的作用域中。只要bar被定义在foo中,它就能访问在foo中定义的所有变量,即使foo的执行已经结束.


如果还不懂的地方,可以去看看《js高级程序设计》《js设计模式》两本书可以做对比

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值