JavaScript中闭包的理解

函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数的作用内,这种特性就是闭包。

从技术的角度来讲,所有的JavaScript函数都是闭包:它们都是对象,它们都关联到作用域链。

var scope = "global scope";

function checkscope(){

   var scope = "local scope";
   function check(){
       return scope;
   }
   return check();
 }

checkscope();函数申明了一个局部变量,并定义了check()函数。
结果返回:local scope

我们也可以理解为:返回函数内部变量的方法叫做闭包。

这样你就很容易的理解闭包:函数定义时的作用域链到函数执行时依然有效。

正常情况,我们每次调用JavaScript函数的时候,都会为之创建一个新的对象来保存局部变量,把这个对象添加至作用域链中。当函数返回的时候,就从作用域链中将这个绑定的变量对象删除。如果不存在嵌套的函数,也没有其他引用指向这个绑定对象,它就会被系统当做垃圾回收。如果定义了嵌套函数,每个函数的函数都各自独立的对应一个作用域链,并且这个作用域链指向一个变量绑定对象。但如果这些函数嵌套的对象在外部函数中保存下来,那么它们也会和所指向的变量绑定对象一样当做垃圾回收。但是如果这个函数定义了嵌套函数,并将它作为返回值返回或存储在某个属性中,这时就会有一个外部引用指向这个嵌套函数。它就不会被垃圾回收,并且它所指向的变量绑定的对象也不会被当做垃圾回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值