闭包

所谓闭包就是函数之间相互嵌套。

现在来解析一下这个函数的执行过程:

先是a被定义的时候,产生scope chain,然后一个指向全局GO

然后a被执行,产生了自己的GO,并且产生了b的定义

scope是作用域链,AO是执行级上下文,也就是所在函数的作用域,GO是全局变量域

然后b被定义,也就是return b的时候

这时候a函数已经销毁,但是b函数的scope继承了a的scope,因为b函数在a函数的里面

但是这里b函数被执行的时候,会产生一个自己的AO,会放在scope chain[0]的位置,这里的a是没有定义的(defined),它会先在自己的AO里面找,找不到才会到scope chain[1],也就是从A继承过来的AO 里面找

 

这个会输出十个10

这样就可以输出0-9,使用立即执行函数

 

几个闭包的功能:

1.

这个是利用闭包,在没有全局函数的情况下让一个函数递增打印一个数,其实也就是说这里的asd变量对于函数hi是一个“全局变量”,而这个全局变量是在函数fun的执行级上下文(AO)中的

 

2.

这个会打印出10个10.

因为在下面调用数组里面的十个函数的时候,寻找i,i此时已经变成了10,很多面试题都会考这个知识点

 

 

闭包还有一个功能是让数据私有化:

内部函数能访问ss,但是直接用对象访问是不能访问的

 

例题

返回number

因为这里使用了立即执行函数,先执行了里面的f(),然后执行了里面的s(),s函数返回是2,所以类型是number

 

返回string

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值