是否可以在JS中使用const
和while
循环。我想知道如果不使用递归函数我们是否可以做这样的事情:
const node = current;
while (!found(node)) {
node = node.previous
}
他们是如何在函数式编程风格中完成的?
答案 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(抛出重新分配)的循环不会这样做。