javascript闭包,作用域的理解

本文通过具体实例详细介绍了JavaScript中闭包的概念,解释了闭包如何引用外部函数的变量,并保存这些变量在内部函数的作用域中,即使外部函数已经执行完毕。
闭包这个概念 我们先来看一下它的定义吧

[b]闭包的准确定义[/b]:代码和代码的作用域构成的综合体。

[b]定义不理解没关系, 上来一段代码在说。[/b]

再看代码列子:

function test(a,b){
var name='j2eedengzhangtao';
function test2(){
var myarg=name;
var myarg2=myarg;
}
return test2;
}
var test3=test(1,2);
test3();
其实闭包就是一個函数 在列子中 test2就是一個闭包了, 为什么说他是闭包, 因为test2中引用了外部函数的变量 ,即引用了test2的外部作用域 ,然后test函数返回了test2 这里 test函数执行完了,按理说 name变量要释放了, 但是 没有! 保存到了test2的作用域。

在总结一下: 闭包函数的上下文环境当中保存了外部函数的参数、局部变量等信息,所以在外部函数执行完毕之后这些属性值并不会被释放掉。??何时才释放呢?当闭包函数自身也不被任何对象所引用的时候才释放。

[b]再来一段 更加深度一点的列子:[/b]
var Rectangle=function(width,height){
this.getWidth=function(){return width};
this.getHeight=function(){return height};
}
Rectangle.prototype.area=function(){
return this.getWidth()*this.getHeight();
}
var rectangle= new Rectangle(12,2);// 在 new的时候 12, 和2 还没被释放。

注意 rectangle没 有width和height的属性 ,对值12 ,2 没办法储存。但是因为
形参了闭包 被存在了 他上一级的作用域
alert(rectangle.area());//输出24 现在释放了

现在理解了 闭包吧 ,最简单的就是最少得两个function ,然后要满足 内部待用了外部函数, 内部函数又被用到了,使得外部函数的东西没被释放 存储在内部函数的作用域里

[b]在补充一句[/b] 在 IE 中,使用闭包,可能会造成内存泄露,不知道现在版本的 IE 浏览器中是否解决了此问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值