# 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());
```

-

