为什么javascript控制台在递归创建对象时不会抛出错误?
代码如下: 对象是递归创建的,我不明白为什么控制台没有抛出任何错误。为什么javascript控制台在递归创建对象时不会抛出错误?,javascript,recursion,Javascript,Recursion,代码如下: 对象是递归创建的,我不明白为什么控制台没有抛出任何错误。 请告诉我这背后是否有任何概念。它不会仅仅因为允许对象属性的值作为该对象的引用而引发错误。这里没有任何实际的递归 例如,如果您编写了一个递归向下爬网对象属性的函数,则只会出现错误,但这可能是因为堆栈上的函数太多,而自引用只是导致该错误的一个因素。您使用以下方法使其循环(而不是递归): var main = function() { this.first = this; } console.log(new main().
请告诉我这背后是否有任何概念。它不会仅仅因为允许对象属性的值作为该对象的引用而引发错误。这里没有任何实际的递归
例如,如果您编写了一个递归向下爬网对象属性的函数,则只会出现错误,但这可能是因为堆栈上的函数太多,而自引用只是导致该错误的一个因素。您使用以下方法使其循环(而不是递归):
var main = function() {
this.first = this;
}
console.log(new main().first);
这和你做的一样:
this.first = this
obj.首先
将引用obj
。在javascript中,这就像说obj。首先
是obj
。实际上,javascript引擎并没有创建无限的对象,只是一个对自身有引用的对象。这里没有递归。您拥有的是自引用(其中一个对象存储引用自身的属性)
您的代码不会抛出,因为
console.log()
足够聪明,可以处理自引用。它不会仅仅因为一个自引用而无限循环,因为它被编码为专门处理这种情况。它没有理由抛出……这里不清楚你在问什么。这段代码没有显示任何递归,也没有显示任何会导致抛出错误的内容。如果要将其设置为JSON.stringify,那么它会抛出,但控制台足够聪明,可以避免这种情况。重新诅咒,但只会两次…或者更确切地说一次!。“递归创建对象”是什么意思?对象包含对自身的引用这一事实?这是允许的。
var obj = {}
obj.first = obj