(闭包)为什么输出这样的结果
* function m1(){
*
* var x = 1;
*
* return function(){
*
* console.log(++x);
*
* }
*
* }
*
*
* m1()(); //2
*
* m1()(); //2
*
* m1()(); //2
*
*
* var m2 = m1();
*
* m2(); //2
*
* m2(); //3
*
* m2(); //4
*
(解释一下为什么上面的三个m1输出结果和后面三个m2的输出结果不一致为什么?)
因为你调用
m1()
相当于初始化了执行了var x = 1
,这样就初始化了x=1
,然后m1()()
就是初始化了x=1
,再调用返回的函数体function(){console.log(++x)}
,所以m1()()
执行多少次都是2
,重复初始化了。后面那个就好理解了,因为m2 = m1()
,初始化了x = 1
,返回函数体,m2();m2();
只是执行函数体,没有重新初始化x=1
,所以等于2
和3