JavaScript 学习笔记 9_JavaScript中的闭包

闭包吧~

JavaScript中的闭包

Function对象本身是不完整的——为了调用它,我们需要传进一个上下文对象以及一组参数(可能是一个空的集合)。在最简单的情况下,闭包可以看做是捆绑了运行所需所有资源的Function对象。
闭包在JavaScript中是隐式而非显式船舰的。没有构造函数new Closure() ,也没有方法来得到闭包对象的句柄。创建闭包就像在代码块中(例如在另一个函数中)声明函数并且使得该函数在代码块之外可以获得一样简单。

如下例子:一个机器人(对象),记录每个机器人创建时的系统时钟时间。
function Robot()
{
var createTime = new Date();
this.getAge = function()
{
var now = new Date();
var age = now – createTime;
return age;
}
}

其实这样我们就创建了一个闭包。一个函数中定义了另一个函数,而内部函数使用的本地变量createTime属于外部函数的作用域。

再看下面:
function Robot()
{
var createTime = new Date();
this.getAge = roboAge;
}

function roboAge()
{
var now = new Date();
var age = now – createTime;
return age;
};

这样就没有创建闭包,且我们得到了一个错误信息:createTime没有定义。闭包仅仅当内部函数创建在外部函数之内的时候才可以工作。

创建闭包非常容易,以至于太容易意外地创建。因为闭包与本地变量绑在一起,使得它们不能被垃圾器收集。例如,如果也以这种方式捕获DOM节点,那么无意中创建的闭包随着时间的延长将会造成严重的内存泄漏。

总结:到现在为止,JavaScript面向对象编程的介绍就这样结束了,当然这只是一个简单的介绍而已,而且这种编程风格不是JavaScript的标准编程风格。但对于先接触Java或者C++的人来说是值得学习和参考的。


codd和他的朋友们休息休息~~~~~~~拜拜~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值