我最近参加了一些JavaScript课程(codeschool),其中一个,他们说:
因此,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);
}
所以问题是:我的推理是对的吗?如果是这样,加载时需要多少内存以及如何计算?
答案 0 :(得分:3)
是的,你是对的,因为所有的功能声明都被提升到顶部并且(通常)在现场编译。函数表达式通常直到运行时才编译,因为它们可能会或可能根本不会被使用:
var f;
if (condition) {
f = function() { ... };
}
// f could be undefined
至于需要多少内存,这取决于引擎的实现。他们如何储存:
全部取决于发动机的内部设计。您可以通过在创建函数之前和之后执行堆转储来执行某些测试,但实际数字会随着优化的添加和删除而变化。