JavaScript 声明的函数在脚本加载时消耗多少内存
How much memory does a JavaScript declared function consume on script loading?
我最近(在codeschool)上了一些JavaScript课程,在其中一个课程中,他们说:
- 函数声明 (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
是undefined
,函数表达式只会在代码运行后分配给foo
。因此,它不会在加载时分配额外的内存。
好的,到现在为止没有问题。但是,"如果 fe 比 fd 有优势,它在加载时节省一些内存"下面的代码应该在加载时分配一些额外的内存,因为它是一个函数声明。
function foo(bar) {
console.log(bar);
}
所以问题是:我的推理对吗?如果是这样,加载时需要多少内存以及如何计算?
是的,你是对的,因为所有函数声明都被提升到顶部并(通常)当场编译。函数表达式通常直到运行时才编译,因为它们可能会也可能根本不使用:
var f;
if (condition) {
f = function() { ... };
}
// f could be undefined
至于它需要多少内存,这取决于引擎实现。他们如何存储:
- 函数的可执行代码
- 参数名称的绑定
- 闭包值
- 代码的字符串值(如果引擎支持)
- 引擎开发人员决定实现函数所需的任何其他值
一切都取决于发动机的内部设计。您可以通过在创建函数之前和之后执行堆转储来执行一些测试,但实际数量会随着优化的添加和删除而变化。
相关文章:
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 重复应用 d3 转换导致的内存泄漏
- 如何显示在给定极限内存在的所有素数
- IE7中的blockUI插件内存泄漏25kb
- 计算输入中有多少逗号分隔的字符串
- Javascript闭包-如何防止内存泄漏
- 基于订阅的nosql内存数据库
- 显示:阻止/无html元素,css.not从内存中释放
- 使用模块模式时分配了多少内存
- 节点为数组中的空值分配多少内存
- 了解脚本使用了多少内存
- 空的 JavaScript 对象有多少内存
- 我可以在javascript中使用多少内存
- 数字的大小(在内存中)是多少
- JavaScript 声明的函数在脚本加载时消耗多少内存
- 用JavaScript重新创建一个函数需要多少内存
- JS移动:我有多少内存可用
- ExtJS应用程序使用了多少JVM内存java堆空间
- 浏览器实际上可以将多少JavaScript加载到内存中
- 初始化画布的内存命中率是多少