抛出问题:
如何实现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.闭包出现的影响性能的问题:
闭包对脚本性能具有负面影响,包括处理速度和内存消耗