Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么find(1,“1”是调用堆栈中的第一个?_Javascript_Recursion - Fatal编程技术网

Javascript 为什么find(1,“1”是调用堆栈中的第一个?

Javascript 为什么find(1,“1”是调用堆栈中的第一个?,javascript,recursion,Javascript,Recursion,我正在阅读雄辩的JavaScript,我想知道调用堆栈是如何跳到书中指出的find(1,“1”)的。我想我想澄清一下我的想法。因为find()函数是在findSolution()函数的本地范围内定义的。首先调用findSolution()。要调用的第二个函数是在findSolution()声明的本地范围内返回find(1,“1”)。这还允许find()函数使用参数target。这个解释准确吗?对不起,我有点困惑 function findSolution(target) { function

我正在阅读雄辩的JavaScript,我想知道调用堆栈是如何跳到书中指出的
find(1,“1”)
的。我想我想澄清一下我的想法。因为
find()
函数是在
findSolution()
函数的本地范围内定义的。首先调用
findSolution()
。要调用的第二个函数是在
findSolution()
声明的本地范围内返回
find(1,“1”)
。这还允许
find()
函数使用参数
target
。这个解释准确吗?对不起,我有点困惑

function findSolution(target) {
  function find(start, history) {
    if (start == target)
      return history;
    else if (start > target)
      return null;
    else
      return find(start + 5, "(" + history + " + 5)") ||
             find(start * 3, "(" + history + " * 3)");
  }
  return find(1, "1");
    }

console.log(findSolution(24));

对这称为闭包-内部函数访问外部函数中可用变量的能力请注意,调用
find()
以使
target
可用并不重要
findSolution()
可以轻松返回
find
而不是调用它,您可以在外部调用
find()
,而
target
在内部仍然可用
find