这些天我的大部分工作都与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”函数?
我真的很困惑。
答案 0 :(得分:5)
每次调用函数“fun”时都会构造这些函数。 (我认为说将构造这些函数的新实例更为正确。)
没关系。现代JavaScript运行时系统非常好。在首次解析外部函数时,可能会将源代码转换为......以及(thunks,机器代码,线程代码......),以便函数的实际“实例化”真正实现便宜。
许多功能语言具有相似的特征。每次调用其包含函数时,都会使用(let ...)
或类似事件声明一个本地Scheme函数。
答案 1 :(得分:0)
一条简单的规则有助于澄清您的困惑:JavaScript函数是函数对象。我们都知道函数体中每次调用函数时都会实例化局部变量。鉴于这两个,答案是显而易见的:每次调用外部函数时都会创建内部函数。