4

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

4

2 回答 2

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();
    };
})();
于 2012-10-01T17:27:32.370 回答
2

考虑这段代码:

function foo(){
  function local(){ ... local code ... }     
  local();
}

在引擎盖下 JS VM 将 foo() 的主体翻译成这个序列(伪代码):

var local = new Function({bytecode: local code});
local();

因此,每次调用 foo 时都会分配一个函数的新实例。通常函数实例是相对较小的对象,无论它的主体有多大。但是仍然 - 分配发生并且堆管理器将忙于收集每次 foo() 调用后留下的垃圾。

于 2012-10-01T18:05:59.740 回答