为什么javascript控制台不会在递归创建对象时抛出错误?

时间:2016-06-16 10:38:36

标签: javascript recursion

var main =  function() {
    this.first = this;
}
console.log(new main().first);

代码在这里: 对象是递归创建的,我不明白控制台为什么不抛出任何错误。 请告诉我这背后是否有任何概念。

3 个答案:

答案 0 :(得分:1)

你用它来循环(不是递归):

this.first = this

和你一样:

var obj = {}
obj.first = obj

obj.first将引用obj。在javascript中,就像说obj.firstobj。实际上,javascript引擎不是创建无限对象,而只是一个引用自身的对象。

答案 1 :(得分:0)

它不会抛出错误只是因为允许对象的属性值作为对该对象的引用。你在这里没有任何实际的递归。

例如,如果你编写了一个函数来递归地向下爬过对象的属性,那么你只会得到一个错误,但那是因为你在堆栈上有太多的函数而且自引用会只是导致这一点的因素。

答案 2 :(得分:0)

这里没有递归。你拥有的是一个自引用(其中一个对象存储一个引用自身的属性)。

您的代码不会抛出,因为console.log()足够智能来处理自引用。它不是因为自引用而无限循环,因为它被编码为专门处理这种情况。

相关问题