0

次のようにコールバック関数をネストしました。

func1(a, function(b){
  var aa;
  func2(c, function(d){
    var cc;
    func3(e, function(f){
      var ee;
      // setup event handler responding to the message
      process.on('message',function(){
        var g = b;
      });
    });
  });
});

ローカル変数 'g' は、最上位のクロージャ パラメーター 'b' を参照しています。

この場合、

  • すべてのクロージャー変数とパラメーター (aa、cc、ee、a、b、c、d、e、f) はメモリに保持されますか?
  • または、トップレベルのクロージャー変数とパラメーター (aa、a、b) のみが保持されますか?

上記のコードのようにすべてのクロージャー環境変数を保持するのではなく、「b」の値のみを保持する次のコードはどうですか?

var global_b;
func1(a, function(b){
  global_b = b;
  b = null; // free the parameter 'b'
  func2(c, function(d){
    func3(e, function(f){
      // setup event handler responding to the message
      process.on('message',function(){
        var g = global_b;
      });
    });
  });
});

ご意見をお寄せいただきありがとうございます。

4

0 に答える 0