2016-06-16 2 views
-2
var main = function() { 
    this.first = this; 
} 
console.log(new main().first); 

コードはここにあります: オブジェクトが再帰的に作成されていますが、コンソールがエラーをスローしない理由を理解できませんでした。 これには何らかの概念があるかどうか教えてください。なぜオブジェクトを再帰的に作成する際にjavascriptコンソールでエラーがスローされないのですか?

+0

ここには理由がありません。 –

+2

あなたがここで何を求めているのかは分かりません。このコードは再帰を表示せず、エラーをスローする原因となるものも表示しません。 – Claies

+0

JSON.stringifyならそれはスローされますが、コンソールはそれを避けるほどスマートです。 –

答えて

0

単にオブジェクトのプロパティの値がそのオブジェクトへの参照であることが許可されているため、エラーは発生しません。実際の再帰はありません。

たとえば、オブジェクトのプロパティを再帰的にクロールする関数を書きましたが、それはスタックに関数が多すぎて自己参照がそれにつながった要因になります。

1
あなたはこれでそれが円形(再帰的ではない)作っている

this.first = this 

それはあなたが行う場合と同じです:

var obj = {} 
obj.first = obj 

obj.firstobjを参照します。それはjavacriptでobj.firstobjであると言っているようです。実際、javascriptエンジンは、無限のオブジェクトを作成するのではなく、オブジェクト自体を参照するオブジェクトだけです。

0

ここに再帰はありません。あなたが持っているものは、自己参照(1つのオブジェクトがそれ自身を参照するプロパティを格納する)です。

console.log()は自己参照を処理するのに十分なスマートなので、コードはスローされません。その状況を特別に扱うようにコード化されているので、自己参照のためにループを無限にすることはありません。

関連する問題