函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。 ----------------------------↑ 以上均为官方解释
此时上方代码就是生成了一个闭包, 闭包产生的的原因和预编译有关
当一个函数被创建到结束的时候 AO的销毁判断就是里面的变量在未来或者现在 是否正在被使用 如果 变量正在被使用然后 AO对象被销毁 会发生不可预估的情况 所以 AO对象在产生闭包的时候 并不会被销毁.
形成闭包的函数 会长期保留在内存里面 ,并且这个函数还是私有的变量 并不会污染全局的变量 闭包开发的时候用的很少 但是 用到的时候 几乎都是不可被别的方式替代的
最重要的一点 : 内存泄漏 如果在你的js代码中大量的使用了闭包 不可避免的就可能发生内存泄漏的问题
内存一般来说都会存储 变量 函数 数组 等数据类型 一旦泄漏会导致数据丢失所以说请能在不影响需求的情况下尽量不去用 闭包,不要在不需要的时候随意生成闭包 ;
