我想更好地理解JavaScript闭包对内存的影响:
function fee(arg){
function figh(){
//some code
fum(passOnSomeARG)
}
function fo(y){
//some calculations with y
}
function fum(x){
//some code
fo(x)
}
figh()
}
在上面的例子中,每次调用“fee()”时内部函数是否重新读入内存?如果这样有效吗?如果不是那么发生了什么?
旁注:fee()可以连续多次调用(循环或鼠标事件onmousemove)
答案 0 :(得分:3)
我想是的,是的。这样做会更有效:
(function() {
var figh = function() {
// some code
fum(passOnSomeARG);
};
var fo = function(y) {
// some calculations with y
};
var fum = function(x) {
// some code
fo(x);
};
window.fee = function(arg) {
figh();
};
})();
答案 1 :(得分:2)
考虑以下代码:
function foo(){
function local(){ ... local code ... }
local();
}
引擎盖下JS VM将foo()的主体转换为此序列(伪代码):
var local = new Function({bytecode: local code});
local();
因此,每次调用foo时,都会分配一个函数的新实例。通常函数实例是相对较小的对象,无论它的体积有多大。但仍然 - 分配发生,堆管理员将忙于收集每次foo()调用后留下的垃圾。