您的位置:首页 > Web前端 > JavaScript

javascript闭包浅谈

2013-03-13 11:15 375 查看
一般要跳过闭包的创建过程,直接进入闭包的概念,是很难的,所以,先来看一个例子:

function a(){

var a=1;

function b(){alert(a);}

}

函数b嵌套于函数a内部,因此a所有的变量对于b都是可见的,反过来则不行,这就是javascript语言特有的“链式作用域”结构。

既然函数b可以读取函数a的值,那么把函数b作为返回值,我们在a()外部就可以读取a()内部的变量了。即以内部嵌套的函数作为返回值,即可获取局部变量。这个内嵌的函数即为闭包。我的理解是,闭包就是能够读取其他函数内部变量的函数。所以,在本质上,闭包是将函数内部和函数外部连接起来的一座桥梁。

闭包最大的作用有两个,一个是如上所说的获取函数内部变量,另一个则是使变量的值始终保存在内存中,由于闭包会使得变量始终保存在内存中,内存消耗很大,在IE中就会造成内存泄露,因此使用闭包还是需要慎重,在退出函数前,将不使用的局部变量全部删除。

闭包会在父函数外部改变父函数内部变量的值,如果把父函数当做object啦使用,把闭包当做它的公用方法,把内部变量当做它的私有属性,这时就一定要小心,不要随便改变父函数内部变量的值。

当内部函数在定义了它的外部作用域被引用时,就创建了该内部函数的闭包,如果内部函数有引用外部函数的变量,当外部函数调用完毕,这些变量不会被释放,因为闭包需要他们。

其实通俗的来说,javascript中所有的函数都是闭包,只不过嵌套的闭包功能更加强大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: