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了。

posted @ 2010-04-02 14:15  kuncai  阅读(142)  评论(0编辑  收藏  举报