1、js的闭包
function a(){
var i = 0;
function b(){
alert(i++);
}
return b;
}
var c = a();
c();
执行完 var c = a()后,变量c实际指向函数名b,再执行 c()会alert(1)[第一次],这段代码创建了一个闭包。因为函数a外的变量引用了函数a内的函数
当函数a内部的函数b,被函数a外的变量引用时,就创建了一个闭包
2、闭包的作用
a执行完,并返回后,闭包使js的垃圾回收机制GC不会回收a所占用的资源,因为函数a的内部函数b的执行需要依赖a中的变量
- 1、可读取函数内部的变量
- 2、让这些变量的值适中保持在内存中。
3、闭包与this对象
在闭包中使用this对象会导致一些问题,因为匿名函数的执行具有全局性,this通常指向window代码
把外部作用域的this对象保存在一个闭包能够访问的变量里面,就能让闭包访问该对象
var name = "The Window"
var object = {
name = "My Object",
getName:function(){
var that = this; //有此语句,指向My Object,无此语句,指向The Windwo
return function(){
return that name;
}
}
}
alert(object.getName(){})
4、Js插件中闭包的应用
(function(){
alert("...")
})
网友评论