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 = {};

你实际上有两件事:

  • 内存中不存在任何属性的对象
  • 对存储在变量中的该对象的引用a

当你这样做时:

var a = {};
var b = a;

你实际上有三件事:

  • 内存中不存在任何属性的对象
  • 对存储在变量中的该对象的引用a
  • 对存储在变量中的该对象的另一个引用b

这就是为什么当你稍后做时a = null;, b 仍然持有对原始对象的引用。

在您的情况下也会发生同样的事情,即使它被对象、属性和函数稍微模糊了一点。

于 2013-11-13T16:52:15.760 回答