javascript - JavaScript 声明的函数在脚本加载时消耗多少内存?

标签 javascript memory memory-management

我最近参加了一些 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

至于需要多少内存,那取决于引擎的实现。他们如何存储:

  1. 函数的可执行代码
  2. 参数名称的绑定(bind)
  3. 关闭值
  4. 代码的字符串值(如果引擎支持)
  5. 引擎开发人员决定实现功能所需的任意数量的其他值

一切都取决于发动机的内部设计。您可以通过在创建函数之前和之后执行堆转储来执行一些测试,但实际数量会随着优化的添加和删除而变化。

关于javascript - JavaScript 声明的函数在脚本加载时消耗多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34954481/

相关文章:

c++ - 如何寻址使用 36 位映射的 IO?

c++ - 嵌套 C++ vector 的重新分配

函数内的javascript函数不返回数据

javascript - Google 面积图中重复的一系列数据

android - 以编程方式扫描和编辑 Android 应用程序内存值

android - Android OpenGLes LoadTextures 内存不足异常

c - 写C程序时如何设置内存使用限制,一旦超过这个限制会怎样?

iphone - "[CALayer release]: message sent to deallocated instance"关闭模态视图 Controller 时

javascript - object.style.zoom 属性在 Firefox 中不起作用

javascript - 为什么这个 JSON 无法正确解析?