js闭包

抛出问题:

  

如何实现javascript的闭包

1.何为闭包

  closure:闭包是一种特殊的对象,有函数本身和创建该函数的环境,环境由闭包创建时在作用域中的任何局部变量组成。定义在闭包中的函数可以“记忆”它创建时候的环境

  看例子:     

function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

print(add5(2));  // 7
print(add10(2)); // 12

add5 和 add10 都是闭包,他们保留了 创建他们时候的变量x.

2.如何实现闭包

     在函数里嵌套一个函数。为何?

闭包有三个特性:

1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收

  

3.闭包的实用

      闭包模拟私有方法:

var counter=(function siyou(){

  var privatecount=0;

  function change(a){privatecount+=a;};

  return {

  increment :function(){change(1);},

  decrement :function(){change(-1);},

  value :funtion(){return privatecount;}

}

})();
counter.increment();
counter.increment();
counter.value();//2
counter.decrement();
counter.value();//1

4.闭包需要注意的问题:

1.循环中出现的问题:加闭包处理 :https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures 原理是循环事件中回调函数里加一个闭包保存循环的每一项

处理循环参数的:http://www.jb51.net/article/57257.htm

5.闭包出现的影响性能的问题:

    闭包对脚本性能具有负面影响,包括处理速度和内存消耗

No living without dream
原文地址:https://www.cnblogs.com/belongcai/p/4775964.html