闭包

当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域不释放,造成内存泄漏。

闭包的作用:

  • 实现公有变量:函数累加器

    1. function add() {
    2. var count = 0;
    3. function demo() {
    4. count++;
    5. console.log(count);
    6. }
    7. return demo;
    8. }
    9. var counter = add();
    10. counter(); // 1
    11. counter(); // 2
  • 可以做缓存(存储结构) ```javascript function test() { var num = 100; function a() { num++; console.log(num); } function b() { num—; console.log(num); } return [a, b]; } var myArr = test(); myArr0; // 101 myArr1; // 100

function eater() { var food = “”; var obj = { eat: function () { console.log(“i am eating “ + food); food = “”; }, push: function (myFood) { food = myFood; } }; return obj; } var eater = eater(); eater.push(“banana”); eater.eat(); // i am eating banana ```

  • 可以实现封装,属性私有化
  • 模块化开发,防止污染全局变量

闭包的防范:闭包会导致多个执行函数共用一个公有变量,如果不是特殊需求,应尽量防止这种情况发生。