Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将创建多少个内部函数副本_Javascript_Prototype Programming - Fatal编程技术网

Javascript 将创建多少个内部函数副本

Javascript 将创建多少个内部函数副本,javascript,prototype-programming,Javascript,Prototype Programming,这些天我的大部分工作都与js开发有关 但是我突然发现我被一些问题弄糊涂了 检查此代码(我向自定义类添加了一个方法): 现在,使用它 var mcc=new MyCustomClass(); mcc.fun(xxxx); var mcc2=new MyCustomClass(); mcc2.fun(xxxx); 现在,我想知道在内存中会创建多少个函数“innerFun01”和“innerFun02”的副本 我真的很困惑。每次调用函数“fun”时都会构造这些函数。(我认为更正确的说法是将构造这些

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

但是我突然发现我被一些问题弄糊涂了

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

现在,使用它

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

var mcc2=new MyCustomClass();
mcc2.fun(xxxx);
现在,我想知道在内存中会创建多少个函数“innerFun01”和“innerFun02”的副本


我真的很困惑。

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

没关系。现代JavaScript运行时系统相当不错。有可能源代码翻译成。。。不管什么(thunks、机器代码、线程代码等)都是在第一次解析外部函数时完成的,因此函数的实际“实例化”非常便宜


许多函数式语言具有相似的特性。用
(let…
或类似的东西声明的本地Scheme函数在每次调用其包含函数时都会产生。

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

这是浪费内存吗?有没有改变的想法?但我不想在外部定义它们,因为我不想公开它们。这并不是真正的内存浪费。它们被实例化,但在方法“fun”运行完毕后被抛出。javascript垃圾收集器不久就会出现,将它们收集起来并扔掉。Erlang杰出人物乔·阿姆斯特朗(Joe Armstrong)通过敦促开发人员尽可能“编写最漂亮的代码”来回应对该语言问题的担忧。编写算法合理的代码,并且只在极端(不太可能)的情况下担心这些事情。
var mcc=new MyCustomClass();
mcc.fun(xxxx);

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