关于js闭包的一些浅层面的理解
Posted 三十亿少女的梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于js闭包的一些浅层面的理解相关的知识,希望对你有一定的参考价值。
function a() { var i = 0; function b() { alert(++i); } return b; } var c = a(); c();
1.js分全局作用域和函数作用域。函数作用域里可以访问到全局,通过一个叫作用域链的东西。但全局怎么访问函数呢?就有人想了在函数里面再写一个函数(闭包),然后在全局引用这个内部函数,全局不就能看到函数里的东西了吗!
2.在javascript中如果一个对象不再被引用,那么它就会被GC回收,闭包防止资源被GC回收也就是这个原理。上面代码每次执行c(),i都会累加1并弹出,因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。
3.闭包可以用来模拟类似于java中private修饰符的作用。上面代码中i只能通过a()中的b()来读取,这就保证了数据i的安全性。
4.滥用闭包会导致占用过多内存,原因如上面第2点所述。
5.闭包具体内部原理是真的恶心!!
以上是关于关于js闭包的一些浅层面的理解的主要内容,如果未能解决你的问题,请参考以下文章