function outer(){ //作用域1 window
var i = 1; //2
return function() {//2
console.log(i++); //3
}
}
/*
outer {
i:1;
function:匿名函数
}
出栈顺序:
1、outer释放不了,内层函数不让释放; v(window)不让内层函数释放 闭包
2、闭包是如何形成的:外层函数的作用域无法释放
*/
//这里最重要的就是要理解内外层函数什么时候才会释放,什么时候还没有被释放 内层如果未被释放,则外层也不会释放,释放顺序就是这样:先释放内部,后释放外面一层。
//v的作用域可以捕获到i,window不可以
var v = outer(); //这里返回一个函数,这个内层函数没有被释放,所以外层函数没有被释放
console.log(v); //这里的输出表明外层函数调用后内层函数并没有被立即释放,所以外层函数没有被释放
v(); //因为没有被释放,所以i还没有被释放 结果:1
v(); //因为没有被释放,所以i没有被释放 结果:2
//...
//最后需要释放outer()函数吧
闭包——嵌套函数
最新推荐文章于 2023-03-22 21:30:00 发布