Named Function Expression for recursion

萝らか妹 提交于 2021-02-20 04:18:30

问题


As suggested by many people, one of the usages of named function expression is for recursively calling itself. However, it seems that in Chrome Console, function expression without a name can still do so.

Edit : I know this is gonna be stackoverflow, however, I would expect a output like a() is not a function instead of Uncaught RangeError: Maximum call stack size exceeded(…).

var a = function () { 
        a();
        }
a();

the following function expression with a name should be giving me a Uncaught RangeError: Maximum call stack size exceeded(…).

var a = function a () { 
           a();
        }
a();

Edit 2 : In this link https://developer.mozilla.org/en/docs/web/JavaScript/Reference/Operators/function, it says that "If you want to refer to the current function inside the function body, you need to create a named function expression.". However, it seems to me that the statement is no true, because you can still refer to the current function inside the function body without assigning a function identifier to it

Any thoughts would be appreciated


回答1:


You are reaching the stack limit because there are no conditions to limit the recursion.

var a = function (i) { 
        console.log(i);
        if (i >= 10) {
          return;
        }
        else {
          a(++i);
        }
}
a(0);

The above is a better example to show an actual working example of this recursion. Notice how there is a check here whether or not to call the recursive function. The output would be the following:

0
1
2
3
4
5
6
7
8
9
10

You can also have this logic successfully defined at parse time:

function a (i) { 
        console.log(i);
        if (i >= 10) {
          return;
        }
        else {
          a(++i);
        }
}
a(0);

As for the scope of the function definition, this example shows when a() would be defined:

if (typeof a === 'undefined') {
  console.log('a is undefined before the definition');
}
else {
  console.log('a is defined before the definition');
}

var a = function () {
  if (typeof a === 'undefined') {
    console.log('a is undefined inside of a');
  }
  else {
    console.log('a is defined inside of a');
  }
}

a();

if (typeof a === 'undefined') {
  console.log('a is undefined after the definition');
}
else {
  console.log('a is defined after the definition');
}

The output to this snippet is the following:

a is undefined before the definition 
a is defined inside of a 
a is defined after the definition


来源:https://stackoverflow.com/questions/32950161/named-function-expression-for-recursion

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!