# ES6学习总结 ## 闭包 匿名函数保存的是引用。看看下面代码例子 ```javascript var array = new Array(); // 实验1: for (var index = 0;index < 3; index++) { array.push(function(){ console.log(index) }) } array[1]() // 输出2 // 实验2 for (var index = 0; index < 3; index++) { (function (n) { array.push(function(){ console.log(n); }) })(index) } array[1]() // 输出1 ``` ### 闭包与内存泄漏 js 内存控制主要是通过计数器。当某个对象 A 引用对象 B,那么 B 的计数器加1,若 A 释放掉了,那么 A 引用对于 B 的计数器将变为 0。若 B 的所有计数器变为0的时候,那么 B 将会被释放。引用循环将会造成内存泄漏,什么是引用循环?A 引用 B,B 引用 A,会造成引用循环,内存泄漏 正是因为闭包的这个特点,我们可以将闭包应用在某些场合。 ### 闭包应用场合 - 封装 ```javascript var Person = function () { var name = "LBP"; return { getName () { return 'I am ' + name; }, setName (newName) { name = newName; } } }(); console.log(Person.name); console.log(Person.getName()); Person.name = "杭城小刘"; Person.setName('杭城小刘'); console.log(Person.getName()); ``` -