From 95aca4b4d8fa62815d4bd412fff1a364f842814a Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Thu, 29 Apr 2021 16:16:42 -0700 Subject: remove retired locales (#699) --- .../reference/errors/too_much_recursion/index.html | 114 --------------------- 1 file changed, 114 deletions(-) delete mode 100644 files/fa/web/javascript/reference/errors/too_much_recursion/index.html (limited to 'files/fa/web/javascript/reference/errors/too_much_recursion') diff --git a/files/fa/web/javascript/reference/errors/too_much_recursion/index.html b/files/fa/web/javascript/reference/errors/too_much_recursion/index.html deleted file mode 100644 index 02a8d54c45..0000000000 --- a/files/fa/web/javascript/reference/errors/too_much_recursion/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: 'InternalError: too much recursion' -slug: Web/JavaScript/Reference/Errors/Too_much_recursion -translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Error: Out of stack space (Edge)
-InternalError: too much recursion (Firefox)
-RangeError: Maximum call stack size exceeded (Chrome)
-
- -

Error type

- -

{{jsxref("InternalError")}}.

- -

What went wrong?

- -

A function that calls itself is called a recursive function. Once a condition is met, the function stops calling itself. This is called a base case.

- -

In some ways, recursion is analogous to a loop. Both execute the same code multiple times, and both require a condition (to avoid an infinite loop, or rather, infinite recursion in this case). When there are too many function calls, or a function is missing a base case, JavaScript will throw this error.

- -

Examples

- -

This recursive function runs 10 times, as per the exit condition.

- -
function loop(x) {
-  if (x >= 10) // "x >= 10" is the exit condition
-    return;
-  // do stuff
-  loop(x + 1); // the recursive call
-}
-loop(0);
- -

Setting this condition to an extremely high value, won't work:

- -
function loop(x) {
-  if (x >= 1000000000000)
-    return;
-  // do stuff
-  loop(x + 1);
-}
-loop(0);
-
-// InternalError: too much recursion
- -

This recursive function is missing a base case. As there is no exit condition, the function will call itself infinitely.

- -
function loop(x) {
- // The base case is missing
-
-loop(x + 1); // Recursive call
-}
-
-loop(0);
-
-// InternalError: too much recursion
- -

Class error: too much recursion

- -
class Person{
-	constructor(){}
-	set name(name){
-		this.name = name; // Recursive call
-	}
-}
-
-
-const tony = new Person();
-tony.name = "Tonisha"; // InternalError: too much recursion
-
- -

When a value is assigned to the property name (this.name = name;) JavaScript needs to set that property. When this happens, the setter function is triggered.

- -
set name(name){
-	this.name = name; // Recursive call
-}
-
- -
-

In this example when the setter is triggered, it is told to do the same thing again: to set the same property that it is meant to handle. This causes the function to call itself, again and again, making it infinitely recursive.

-
- -

This issue also appears if the same variable is used in the getter.

- -
get name(){
-	return this.name; // Recursive call
-}
-
- -

To avoid this problem, make sure that the property being assigned to inside the setter function is different from the one that initially triggered the setter.The same goes for the 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);
-
- -

See also

- - -- cgit v1.2.3-54-g00ecf