闭包
所谓闭包就是函数之间相互嵌套。
现在来解析一下这个函数的执行过程:
先是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