首先用一段代码来告诉大家什么是内嵌函数.
内嵌函数代码示例如下:
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属性,详细讲解见下篇博客.