js:闭包
var getNum;
function getCounter() {
var n = 1;
var inner = function () {return n++; }
console.log(n);
return inner;
}
//第一步
getNum = getCounter();
//第二步
console.log(getNum());//1
//第三步
console.log(getNum());//2
//也许是这样?可能的情况1:
//第一步 getNum指向了getCounter函数的返回值,即inner函数,此时inner内的n调用的是上级函数的n,但是没有执行,所以此时n是1,而且由于他调用的是上级函数的变量,此时inner的n突破了作用域,n=1写入到了内存中,可以以后进行调用
//第二步 执行getNum函数,也就是执行了inner函数,inner函数此时返回n++,也就是 1++ 返回了1,执行后n现在等于2了
//第三部 同上返回2,执行后n等于3
//或者是这样?可能的情况2:
//第一步 getNum指向了getCounter函数的返回值,即inner函数
//第二步 执行了getNum函数,也就是执行了inner函数,由于他在一个高阶函数getCounter内部,他可以使用高阶函数内的变量n,由于inner函数被return,此时n实现了越狱,n=1写入到了内存中,可以以后进行调用,此时输出1,n++后n=2
//第三步 由于n实现了越狱,输出2,n++后n=3
//n不是全局变量,只能在inner内使用