javascript闭包小结
1.什么是闭包
我个人的理解是:闭包是指函数内部变量和内部函数的作用域与生命周期的规则
function a () {
var x;
function b(){
alert(x);
}
}
这是个简单的闭包示例。
2.内部变量的作用域
函数内部定义变量时,如果用var,则定义的是函数内部变量,否则是全局变量
这里讨论var定义的变量。
此时变量x只在函数a内可以访问,外部无法访问,而b属于a的内部函数,则b可以直接访问x。
这就是闭包中变量的作用域。
3.内部变量的生命周期
当一个变量的引用数为0时,它的内存将可以被回收,否则继续存在
这就是说如果a执行完了,而b的实例还存在,则在b的实例中还有x的引用,那么a将不会被回收。
4.内部函数的作用域
其实函数的作用域和普通变量是一样,只不过这个变量是指向一个函数实例而已
内部函数b的作用域是在a内。
如果a外想访问b则需要将b的实例返回出去。例如:
function a(){
var x;
var b = function(){
alert(x);
}
return b;
}
f = a();
这样就可以通过f来访问内部函数b了。