var main = function() {
this.first = this;
}
console.log(new main().first);
コードはここにあります: オブジェクトが再帰的に作成されていますが、コンソールがエラーをスローしない理由を理解できませんでした。 これには何らかの概念があるかどうか教えてください。なぜオブジェクトを再帰的に作成する際にjavascriptコンソールでエラーがスローされないのですか?
var main = function() {
this.first = this;
}
console.log(new main().first);
コードはここにあります: オブジェクトが再帰的に作成されていますが、コンソールがエラーをスローしない理由を理解できませんでした。 これには何らかの概念があるかどうか教えてください。なぜオブジェクトを再帰的に作成する際にjavascriptコンソールでエラーがスローされないのですか?
単にオブジェクトのプロパティの値がそのオブジェクトへの参照であることが許可されているため、エラーは発生しません。実際の再帰はありません。
たとえば、オブジェクトのプロパティを再帰的にクロールする関数を書きましたが、それはスタックに関数が多すぎて自己参照がそれにつながった要因になります。
:
this.first = this
それはあなたが行う場合と同じです:
var obj = {}
obj.first = obj
obj.first
obj
を参照します。それはjavacriptでobj.first
がobj
であると言っているようです。実際、javascriptエンジンは、無限のオブジェクトを作成するのではなく、オブジェクト自体を参照するオブジェクトだけです。
ここに再帰はありません。あなたが持っているものは、自己参照(1つのオブジェクトがそれ自身を参照するプロパティを格納する)です。
console.log()
は自己参照を処理するのに十分なスマートなので、コードはスローされません。その状況を特別に扱うようにコード化されているので、自己参照のためにループを無限にすることはありません。
ここには理由がありません。 –
あなたがここで何を求めているのかは分かりません。このコードは再帰を表示せず、エラーをスローする原因となるものも表示しません。 – Claies
JSON.stringifyならそれはスローされますが、コンソールはそれを避けるほどスマートです。 –