将创建多少内部函数的副本

时间:2011-08-29 14:02:04

标签: javascript prototype-programming

这些天我的大部分工作都与js开发有关。

然而我突然发现我对一些问题感到困惑。

检查此代码(我向自定义类添加一个方法):

MyCustomClass.prototype.fun=function(xx){
  this.options={.....}
  function innerFun01(){}
  function innerFun02(){}
}

现在,使用它。

var mcc=new MyCustomClass();
mcc.fun(xxxx);

var mcc2=new MyCustomClass();
mcc2.fun(xxxx);

现在,我想知道将在内存中创建多少份“innerFun01”和“innerFun02”函数?

我真的很困惑。

2 个答案:

答案 0 :(得分:5)

每次调用函数“fun”时都会构造这些函数。 (我认为说将构造这些函数的新实例更为正确。

没关系。现代JavaScript运行时系统非常好。在首次解析外部函数时,可能会将源代码转换为......以及(thunks,机器代码,线程代码......),以便函数的实际“实例化”真正实现便宜。

许多功能语言具有相似的特征。每次调用其包含函数时,都会使用(let ...)或类似事件声明一个本地Scheme函数。

答案 1 :(得分:0)

一条简单的规则有助于澄清您的困惑:JavaScript函数是函数对象。我们都知道函数体中每次调用函数时都会实例化局部变量。鉴于这两个,答案是显而易见的:每次调用外部函数时都会创建内部函数。