JavaScript闭包内存效率如何?

时间:2012-10-01 17:24:27

标签: javascript memory memory-leaks closures

我想更好地理解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)

2 个答案:

答案 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()调用后留下的垃圾。