2
var ninja = {
  yell: function yellaaa(n){
    return n > 0 ? yell(n-1) + "a" : "hiy";
  }
};

var samurai = { yell: ninja.yell };
var ninja = null;
assert( samurai.yell(4) == "hiyaaaa", "The method correctly calls itself." );

ninja.null が削除された後も samurai.yell を呼び出すことができるのはなぜですか? これは、オブジェクトメソッドに名前を付けることで、コピーが「ディープコピー」になり、匿名関数は「浅いコピー」のみを実行することを意味しますか?

ありがとう

4

1 に答える 1

1

関数もオブジェクトです。Ninja がエール関数オブジェクトを作成している間に、コードの後半で Samurai がそれを参照します。これで、同じ (関数) オブジェクトへの 2 つの参照ができました。その後、Ninja (2 人の審判の 1 人) を「削除」しますが、Samurai での参照は引き続き保持されます。

于 2013-06-10T08:38:48.347 に答える