【问题标题】:How does JavaScript deals with value which is unknown? [duplicate]JavaScript 如何处理未知的值? [复制]
【发布时间】:2018-08-04 07:26:34
【问题描述】:

我是 JavaScript 新手,正在阅读 book,在递归章节中,有一个示例如下

function findSolution(target) {
  function find(current, history) {
    if (current == target)
      return history;
    else if (current > target)
      return null;
    else
      return find(current + 5, "(" + history + " + 5)") ||
             find(current * 3, "(" + history + " * 3)");
  }
 *return find(1, "1"); // when will this run?
}

console.log(findSolution(24));
// → (((1 * 3) + 5) * 3)

我无法理解 JavaScript 将如何运行这些原因,因为它在所有三个 if 情况下都期望 current 的值?但作者只是运行以target 作为参数的函数外部,而不是current。它是否从

获取当前和历史的价值
return find(1,"1")

喜欢吊装吗?

【问题讨论】:

  • 在定义 find 之后立即使用两个参数调用它,1 (current) 和 "1" (history)。这不是提升,您实际上是在传递它们。
  • 没有return find(1, "1"); 什么都不会发生。这个内部函数不会被调用。这是第一次调用,有两个参数。没什么大不了的。

标签: javascript loops


【解决方案1】:

currenthistoryfund 函数上的参数名称,而不是findSolution 函数。

所以是的,当find(1, "1") 用于调用该函数时(然后,当find(current * 5, …)find(current + 3, …) 被调用时),它将获得这些值。


这无论如何都不像吊装或与吊装有关。

【讨论】:

    【解决方案2】:

    find 只是findSolution 中的一个嵌套函数。find 需要return find(1, "1") 给出的2 个参数。

    该语句将在您每次调用 findSolution 时运行,因为 find 刚刚定义,您显然必须调用它。

    注意targetfindSolution 的参数,但也可以在该方法的嵌套函数中使用。

    【讨论】:

    • 谢谢,一问为什么 find 调用第二个 ||而不是第一个?或者可能是哪一个返回以及为什么没有比较 >
    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2016-04-07
    • 2017-01-21
    • 2010-12-31
    相关资源
    最近更新 更多