ES6 交替 While 循环
ES6 Alternate While Loop
我有以下我一直在开发的代码,一个备用 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
或 while
循环...
在实际调用 _while
之前计算表达式 !!("qwerty")[len])
。那时len
就是0
,所以表达式的结果会是true
.
要解决此问题,您可以要求 cond
成为一个函数,就像 act
一样。这样,您可以每次通过循环评估条件。我想它看起来像这样(虽然我不 JavaScript 精明):
_while = (cond, act) => cond() && act() & _while(cond, act)
给定的例子将变成
len = 0; _while(()=>!!("qwerty")[len], ()=>++len);
我有以下我一直在开发的代码,一个备用 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
或 while
循环...
在实际调用 _while
之前计算表达式 !!("qwerty")[len])
。那时len
就是0
,所以表达式的结果会是true
.
要解决此问题,您可以要求 cond
成为一个函数,就像 act
一样。这样,您可以每次通过循环评估条件。我想它看起来像这样(虽然我不 JavaScript 精明):
_while = (cond, act) => cond() && act() & _while(cond, act)
给定的例子将变成
len = 0; _while(()=>!!("qwerty")[len], ()=>++len);