想明确下就是:
1、2的条件是形成了自由变量
- 闭包的形成和函数结构有关,而不是在函数执行调用的时候形成的是吗?比如说函数嵌套函数的结构,内层函数没有调用,但是不妨碍形成闭包。
- 只要外层函数被调用了,外层函数中声明的变量值就一直保存在内存中,与内层函数是否被调用无关。只是内层函数被调用的时候,外层函数申明的变量值和内层函数申明的遍量值都被保存在内存中是吗?
- 在没有形成自由变量的情况下,只是结构上函数嵌套函数,算是闭包吗?如下代码:
function fn1(){
var a=123;
function fn2(){
var b=0
alert(b)
}
}
1.可以不调用内层函数,但必须有外部变量保持对内层函数的引用,没有引用的话会被垃圾回收算法清掉;
2.同上,需要保持对内层函数的引用。只要引用存在,外层函数的变量是一直保存在内存中的,而不是调用的时候才加载;
3.
fn2
不会执行,因为你只是声明,并没有调用;即使调用也马上会被垃圾回收算法清掉,因为没有外部变量对其引用。可作如下改写当然没有
console
的话a
也是会保留在内存中的,但我个人认为不算闭包,因为没有对内部函数引用的变量闭包很重要的特征是外部变量对内部函数的引用,这篇文章介绍的比较清楚
https://github.com/mqyqingfen...