javascript的闭包
作用域的好处是:内部函数有权访问外部函数的参数和变量(this和arguments除外)。
1. 闭包的概念:
闭包是指有权访问某个函数作用域中的变量的函数。
2. 闭包的常见方式:
在一个函数内部创建一个函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
3. 闭包的用途:
获取函数的内部变量;
将变量的值始终保存在内存中。
4. 使用闭包要注意的点:
1)由于闭包会使函数的变量保存在内存中,内存消耗大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。
解决方法是:在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部改变父函数内部变量的值。
如果将父函数当作对象使用,把闭包当作它的共有方法,把内部变量当作私有属性,这是一定要小心,不要随便改变父函数内部变量的值。
例子:
var add_the_handlers = function(nodes){
var helper = function(i){
return function(e){
alert(i);
}
};
var i;
for(i = 0; i < nodes.length; i++){
nodes[i].onclick = helper(i);
}
};
阅读文章:
1. 《js语言精粹》第4章函数
2. 阮一峰的网络日志《学习Javascript闭包(closure)》--网址:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
原文:http://www.cnblogs.com/beileiluan/p/6259312.html