Js内嵌函数与闭包

首先用一段代码来告诉大家什么是内嵌函数.

内嵌函数代码示例如下:

function Person(name,age)
{
	this.name=name;
	this.age=age;
	this.info=function()
	{
		document.writeln('姓名:'+this.name);
		return age;
	}
}
var p=new Person('sara',33);
p.info();
var val=p.info();
alert(val);

代码中的info函数就是一个内嵌函数.

使用上面的方法为Person类增加info的方法相当的不好,主要有如下两个原因:

  • 性能低下:因为每次创建Person实例时,程序依次向下执行,每次执行到info函数
    时都会创建一个新的info函数,如果有多个Person对象时,系统就会有多个info函数,这就会造成系统内存泄露,从而引起系统性能下降.实际上,info函数只需要一个就足够了.
  • 使得info函数中的局部变量产生闭包:闭包会扩大变量的作用域,使得局部变量一直存活到函数之外的地方.

如上面代码所示,由于info函数访问了局部变量age,所以形成了闭包,从而导致age变量的作用域被扩大.
所以为了避免这两种情况的产生,通常不建议在函数中直接为该函数定义方法,而建议使用prototype属性,详细讲解见下篇博客.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值