Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么javascript控制台在递归创建对象时不会抛出错误?_Javascript_Recursion - Fatal编程技术网

为什么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