【问题标题】:How to use const with while loop in javascript如何在 JavaScript 中使用 const 和 while 循环
【发布时间】:2017-09-11 18:21:28
【问题描述】:

是否可以在 JS 中使用 constwhile 循环。我想知道我们是否可以在不使用递归函数的情况下做这样的事情:

const node = current;
while (!found(node)) {
    node = node.previous
}

他们如何以函数式编程风格做到这一点?

【问题讨论】:

  • 您的意思是 curnode 在您的代码中是同一个变量吗?
  • 对不起,这是我编辑时的错误
  • 呃?好吧,如果您有意重新分配变量,则不要使用const

标签: javascript functional-programming


【解决方案1】:

函数式风格不使用while 循环,因此唯一的方法是使用递归。如果您的 node 是一个具有 current 和先前字段的对象,则更“实用”的方法是:

function find(startNode) {
    if (!found(startNode)) {
      if (startNode.previous) {
        return find(startNode.previous)
      } else { 
        return null
      }
    } else {
      return startNode
    }
}

然后在初始节点上调用find

【讨论】:

    【解决方案2】:

    没有。 const 表示常量。
    在该调用的整个生命周期内,const 的值永远不会改变。

    let cur;
    while (!found(cur)) {
      node = node.previous;
      // do stuff
      cur = // ...
    }
    

    这样就可以了。

    同样

    for (let i = 0; i < stuff.length; i += 1) {
      const thing = stuff[i];
      // do stuff with a thing
    }
    

    这里的 const 在循环中只存在一次迭代。
    在循环之外,它会经历每次迭代,这意味着它不会被重新创建,这意味着它不能通过整个循环(或函数的任何其他部分)重新分配,因为它是一个常数。

    然而,这些都不是特别实用。

    非常有可能在没有递归的情况下进行 FP,但是这些设置都不是实现此类的方法。如果您希望避免在您维护的代码中发生变异,我建议您了解 map/filter/reduce 以及构建集合以支持这些技术的思维模式。因为带有 const 的循环(会引发重新分配)不会这样做。

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 2014-12-21
      • 1970-01-01
      • 2020-08-14
      • 2020-04-17
      相关资源
      最近更新 更多