我有以下代码我正在开发,另一个(Id1, Id2)
循环:
while
在这种情况下,_while = (cond, act) => cond && act() & _while(cond, act)
旨在通过每次迭代更改act()
的最终结果,直到cond
被评估为cond
为止,然后循环意味着端...
我试图通过使用我的代码逐步通过字符串来确定字符串的长度来测试它。因此,我的代码如下:
false
现在,我的想法是,此代码将基本上逐步执行并测试字符串中每个字符的存在,递增len = 0; _while(!!("qwerty")[len], ()=>++len);
,直到它尝试len
为"qwe"[6]
,并且undefined
将!!
返回的值呈现为undefined
,退出循环,false
的值等于len
...
然而,我甚至没有那么远......由于某种原因,这个循环继续前进,并且放弃了6
的错误
任何人都可以看到我的代码出错吗?我想保留原始代码的内容,而不必使用原生的InternalError: too much recursion
或for
循环...
答案 0 :(得分:2)
在实际调用!!("qwerty")[len])
之前评估表达式_while
。那时,len
为0
,因此表达式的结果为true
。
要解决此问题,您可以要求cond
成为一个函数,就像act
一样。这样,您可以通过循环每次评估条件。我猜它看起来像这样(虽然我不精通JavaScript):
_while = (cond, act) => cond() && act() & _while(cond, act)
然后给出的例子将成为
len = 0; _while(()=>!!("qwerty")[len], ()=>++len);