武士依赖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>

最佳答案

当你有

var a = {};


您实际上有两件事:


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


当您这样做时:

var a = {};
var b = a;


您实际上有三件事:


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


这就是为什么当您以后执行a = null;时,b仍然保留对原始对象的引用。

即使您的情况,对象,属性和功能稍为模糊,也会发生相同的情况。

关于javascript - 为什么对匿名函数的引用仍然存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19959582/

10-12 19:40