0

Samurai は ninja.chirp に依存していますが、ninja.chirp への参照を削除しました。このコードが機能し続けるのはなぜですか?

    var ninja = {
        chirp: function (n) {
            return n > 1 ? this.chirp(n - 1) + '-chirp' : 'chirp'; 
        }
    };

    function chirp(n) {
        return n > 1 ? chirp(n-1) + '-chirp' : 'chirp'; 
    }

    var samurai = {
        chirp: ninja.chirp
    };

    ninja = {};
    try {
        console.log(samurai.chirp(3));
    }
    catch (e) {
        console.log("no can do.");
    }
</script>
4

1 に答える 1

5

あなたが持っているとき

var a = {};

実際には次の 2 つがあります。

  • メモリに存在するプロパティを持たないオブジェクト
  • 変数に格納されているそのオブジェクトへの参照a

あなたがするとき:

var a = {};
var b = a;

実際には次の 3 つがあります。

  • メモリに存在するプロパティを持たないオブジェクト
  • 変数に格納されているそのオブジェクトへの参照a
  • 変数に格納されているそのオブジェクトへの別の参照b

そのため、後で を実行してもa = null;、 b は元のオブジェクトへの参照を保持しています。

オブジェクト、プロパティ、および関数によって少しわかりにくくなっていますが、同じことがあなたの場合にも起こります。

于 2013-11-13T16:52:15.760 に答える