我最近参加了一些 JavaScript 类(class)(在 codeschool ),其中一门类(class)中他们说:
- 程序加载时,函数声明 (fd) 立即在内存中构建;
- 函数表达式 (fe) 在执行过程中动态地在内存中构建。
因此 fe 比 fd 有一个优势,即在加载时节省一些内存 - 我的结论是。
因此,例如,考虑下面的两个片段代码,加载时不会有任何额外的内存分配,因为 foo
将被分配给 undefined
感谢提升。
// Original code
var foo = function (bar) {
console.log(bar);
};
下面是提升后的代码
// Code after hoisting
var foo = undefined;
foo = function (bar) {
console.log(bar);
};
简而言之,foo
是未定义
,并且函数表达式仅在代码运行后才会分配给foo
。因此它不会在加载时分配额外的内存。
好的。到目前为止没有问题。但是,“如果 fe 比 fd 具有优势,即在加载时节省一些内存”,则以下代码应该在加载时分配一些额外的内存,因为它是一个函数声明。
function foo(bar) {
console.log(bar);
}
所以问题是:我的推理正确吗?如果是这样,加载时需要多少内存以及如何计算?
最佳答案
是的,你是对的,因为所有函数声明都被提升到顶部并(通常)当场编译。函数表达式通常直到运行时才会被编译,因为它们可能会也可能根本不会被使用:
var f;
if (condition) {
f = function() { ... };
}
// f could be undefined
至于需要多少内存,那取决于引擎的实现。他们如何存储:
- 函数的可执行代码
- 参数名称的绑定(bind)
- 关闭值
- 代码的字符串值(如果引擎支持)
- 引擎开发人员决定实现功能所需的任意数量的其他值
一切都取决于发动机的内部设计。您可以通过在创建函数之前和之后执行堆转储来执行一些测试,但实际数量会随着优化的添加和删除而变化。
关于javascript - JavaScript 声明的函数在脚本加载时消耗多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34954481/