6

たとえば、次のコードを見てください。

var test = (function(){
  var name = 'rar';
  return function foo(){
    console.log('test');
  };
}());

foo内部スコープでtest 参照なしで返されます。nameはどうなりnameますか?それは破壊されていますか?それとも、引き続き存在し、返された関数にぶら下がっていますが、アクセスできないだけですか? name最初のケースは、方程式の一部ではないかのように、次のことを行うのと似ていますか?:

var test = function foo(){
  console.log('test');
};

別のケースを次に示します。

var test2 = (function(){
  var name = 'rar';
  var age = '20';
  return function foo(){
    console.log(age);
  };
}());

ageによって参照されfoo、クロージャを形成します。ただし、nameまだ何からも参照されていません。nameこの場合はどうなりますか?それは破壊されていますか?それとも、引き続き存在し、返された関数にぶら下がっていますが、アクセスできないだけですか?

4

1 に答える 1

4

Chrome では、nameGCed になります。FireFox では、nameクロージャー全体で保持されます。いいえ?知らない。

于 2013-05-31T05:54:29.537 に答える