InternalError: too much recursion
JavaScript ã®ä¾å¤ã§ãã "too much recursion" ã¾ã㯠"Maximum call stack size exceeded" ã¯ã颿°ã®å¼ã³åºããå¤ãããå ´åãã颿°ã«åºç¤ã±ã¼ã¹ããªãå ´åã«çºçãã¾ãã
ã¨ã©ã¼ã¡ãã»ã¼ã¸
RangeError: Maximum call stack size exceeded (Chrome) InternalError: too much recursion (Firefox) RangeError: Maximum call stack size exceeded. (Safari)
ã¨ã©ã¼å
InternalError (Firefox) ã¾ã㯠RangeError (Chrome 㨠Safari)
ã¨ã©ã¼ã®åå
èªåèªèº«ãå¼ã³åºã颿°ã¯å台颿°ã¨å¼ã°ãã¾ããããæ¡ä»¶ãæºããã¨ã颿°ã¯èªåèªèº«ãå¼ã³åºãã®ãããã¾ããããã¯åºç¤ã±ã¼ã¹ã¨å¼ã°ãã¾ãã
ããã¤ãã®ç¹ã§ãå帰ã¯ã«ã¼ãã«ä¼¼ã¦ãã¾ãã両æ¹ã¨ããåãã³ã¼ããè¤æ°åå®è¡ãã (ç¡éã«ã¼ãã¾ãã¯ç¡éå帰ãé¿ããããã«) æ¡ä»¶ãå¿ è¦ã¨ãã¾ãã 颿°ã®å帰å¼ã³åºããæ·±ãããå ´åãã¾ãã¯é¢æ°ãåºç¤ã±ã¼ã¹ãæ¬ ãã¦ããå ´åã JavaScript ã¯ãã®ã¨ã©ã¼ãçºçãã¾ãã
ä¾
çµäºæ¡ä»¶ã«å¾ã£ã¦ããã®å台颿°ã¯ 10 åå®è¡ããã¾ãã
function loop(x) {
if (x >= 10)
// "x >= 10" ã¯çµäºæ¡ä»¶
return;
// ä½ããå®è¡
loop(x + 1); // å帰å¼ã³åºã
}
loop(0);
ãã®æ¡ä»¶ã«ãé常ã«å¤§ããå¤ãè¨å®ããã¨åä½ãã¾ããã
function loop(x) {
if (x >= 1000000000000) return;
// ä½ããå®è¡
loop(x + 1);
}
loop(0);
// InternalError: too much recursion
ãã®å台颿°ã¯åºç¤ã±ã¼ã¹ãæ¬ ãã¦ãã¾ããè±åºæ¡ä»¶ããªãããããã®é¢æ°ã¯èªåèªèº«ãç¡éã«å¼ã³åºãç¶ãã¾ãã
function loop(x) {
// åºç¤ã±ã¼ã¹ãæ¬ ãã¦ãã
loop(x + 1); // å帰å¼ã³åºã
}
loop(0);
// InternalError: too much recursion
Class error: too much recursion
class Person {
constructor() {}
set name(name) {
this.name = name; // å帰å¼ã³åºã
}
}
const tony = new Person();
tony.name = "Tonisha"; // InternalError: too much recursion
å¤ããããã㣠name ã«ä»£å ¥ãããã¨ã (this.name = name;) JavaScript ã¯ããããã£ãè¨å®ããå¿ è¦ãããã¾ãããããçºçããã¨ãã»ãã¿ã¼é¢æ°ãå¼ã³åºããã¾ãã
ãã®ä¾ã§ã¯ãã»ãã¿ã¼ãå¼ã³åºãããã¨ããåããã¨ãå度è¡ãããã«æç¤ºããã¾ãã*ã¤ã¾ããå¦çãã¦ããã®ã¨åãããããã£ã«è¨å®ãã¾ãã*ããã«ããã颿°ã¯ä½åº¦ãä½åº¦ãèªåèªèº«ãå¼ã³åºããç¡éã«å帰ãè¡ããã¾ãã
ãã®åé¡ã¯åã夿°ãã²ãã¿ã¼ã«ä½¿ç¨ãããå ´åã«ãçºçãã¾ãã
class Person {
get name() {
return this.name; // å帰å¼ã³åºã
}
}
ãã®åé¡ãé²ãã«ã¯ãã»ãã¿ã¼é¢æ°ã®å é¨ã§ä»£å ¥ãããã¨ãã¦ããããããã£ãããã¨ãã¨ã»ãã¿ã¼ãèµ·åãããã®ã¨ç°ãªã£ã¦ãããã¨ã確èªãã¦ãã ãããåããã¨ãã²ãã¿ã¼ã«ãè¨ãã¾ãã
class Person {
constructor() {}
set name(name) {
this._name = name;
}
get name() {
return this._name;
}
}
const tony = new Person();
tony.name = "Tonisha";
console.log(tony);