闭包(1)

闭包:但凡是内部的函数被保存到了外部,一定生成闭包。

function a(){
			var num = 100;
			function b(){
				num ++;
				console.log(num);
				
			}
			return b;
		}
		var demo = a();
			demo();
			demo();//101       102

详细过程:a产生的劳动成果,a的劳动成果是他的执行期上下文,连着GO,然后b是在a的基础上去定义的,所以b拿的是a的劳动成果,所以b是能访问100这个变量的,那b刚刚被定义的状态拿的是不是a完整的劳动成果,死死地绑自己身上,然后b每次被执行的时候,都在自己的执行期上下文上面形成新的AO,去穿到刚才那个链上,然后执行完以后把自己新的AO扔掉,等待下一次被执行,他来回新建和扔掉,新建和扔掉,扔的那是自己的AO吧,始终这个环节a的AO都没有被改变,所以第一次他执行demo的时候,相当于执行的是b执行,b执行是不是他要拿num这个变量去,num变量是谁的AO上的?是a的AO上的吧,所以第一次aAO:{num:101},然后是不是打印出来执行完了,执行完之后是不是把自己的执行期上下文给扔了,然而b的AO,你扔不扔都没有用对吧,咱也没用他。然后下一次在执行这个东西,是不是在他被定义的基础上,在形成一个新的AO,再穿上那个穿,生成一个新的b的AO吧,但是他执行的结果根本没有上b的AO里面去找东西,b的AO里面啥也没有,他找的还是a的AO的那个num,所以这回拿num是101,num++是不是102,然后再打印。

猜你喜欢

转载自blog.csdn.net/hdq1745/article/details/81148231