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)
้ฏ่ชค้กๅ
Firefox ไธญ็บ InternalError
๏ผChrome ๅ Safari ไธญ็บ RangeError
ใ
ๅช่ฃกๅบ้ฏไบ๏ผ
ไธๅๆๅผๅซ่ชๅทฑ็ๅฝๅผ็จฑ็บ้่ฟดๅฝๅผใไธๆฆๆปฟ่ถณๆๅๆขไปถ๏ผๅฝๅผๅฐฑๆๅๆญขๅผๅซ่ชๅทฑใ้็จฑ็บๅบ็คๆ ๆณใ
ๅจๆไบๆน้ข๏ผ้่ฟด้กไผผๆผ่ฟดๅใๅ ฉ่ ้ฝๆๅคๆฌกๅท่ก็ธๅ็็จๅผ็ขผ๏ผไธ้ฝ้่ฆไธๅๆขไปถ๏ผไปฅ้ฟๅ ็ก้่ฟดๅ๏ผๆๅจๆญคๆ ๆณไธๆฏ็ก้้่ฟด๏ผใ็ถๅฝๅผๅผๅซ้ๅค๏ผๆๅฝๅผ็ผบๅฐๅบ็คๆ ๆณๆ๏ผ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 ้ฏ่ชค๏ผ้่ฟด้ๅค
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 ้่ฆ่จญๅฎ่ฉฒๅฑฌๆงใ็ถ้็จฎๆ ๆณ็ผ็ๆ๏ผๅฐฑๆ่งธ็ผ setter ๅฝๅผใ
ๅจๆญค็ฏไพไธญ๏ผ็ถ setter ่ขซ่งธ็ผๆ๏ผๅฎ่ขซๅ็ฅ่ฆๅๆฌกๅๅๆจฃ็ไบๆ ๏ผ่จญๅฎๅฎๆฌๆ่็็ๅไธๅๅฑฌๆงใ้ๆๅฐ่ดๅฝๅผไธๆทๅฐๅผๅซ่ชๅทฑ๏ผๅพ่้ ๆ็ก้้่ฟดใ
ๅฆๆๅจ getter ไธญไฝฟ็จ็ธๅ็่ฎๆธ๏ผไนๆๅบ็พๆญคๅ้กใ
class Person {
get name() {
return this.name; // ้่ฟดๅผๅซ
}
}
็บ้ฟๅ ๆญคๅ้ก๏ผ่ซ็ขบไฟๅจ setter ๅฝๅผๅ ง้จๆๆดพ็ๅฑฌๆง่ๆๅ่งธ็ผ setter ็ๅฑฌๆงไธๅใgetter ไนๆฏๅฆๆญคใ
class Person {
constructor() {}
set name(name) {
this._name = name;
}
get name() {
return this._name;
}
}
const tony = new Person();
tony.name = "Tonisha";
console.log(tony);