如何在javascript中使用const with while循环

时间:2017-04-15 17:51:27

标签: javascript functional-programming

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

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

他们是如何在函数式编程风格中完成的?

2 个答案:

答案 0 :(得分:2)

功能样式不使用while循环,因此执行此操作的唯一方法是使用递归。如果您的node是具有current和之前字段的对象,则可采用更“实用”的方式:

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

然后在初始节点上调用find

答案 1 :(得分:1)

没有。 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以及构建集合以支持这些技术的思维模式,如果您希望避免在代码内部改变状态你维护的。因为带有consts(抛出重新分配)的循环不会这样做。