作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发以下代码,一个备用 while
循环:
_while = (cond, act) => cond && act() & _while(cond, act)
在这种情况下,act()
旨在每次迭代时更改 cond
的最终结果,直到 cond
计算为 false
,则循环将结束...
我尝试通过使用我的代码逐步遍历字符串来确定字符串的长度来测试这一点。结果,我的代码如下:
长度= 0; _while(!!("qwerty")[len], ()=>++len);
现在,我的想法是,这段代码基本上将逐步执行并测试字符串中每个字符的存在,递增 len
直到它尝试 "qwe"[6]
是 undefined
,!!
将 undefined
返回值呈现为 false
,退出循环, len
的值等于 6
...
但是,我什至还没有做到这一点...由于某种原因,这个循环继续进行,并因 InternalError: Too much recursion
任何人都可以看到我的代码做错了什么吗?我想尽可能保留原始代码,而不必求助于 native for
或 while
循环...
最佳答案
表达式 !!("qwerty")[len])
在实际调用 _while
之前进行计算。此时,len
为0
,因此表达式的结果将为true
。
要解决此问题,您可以要求 cond
是一个函数,就像 act
一样。这样,您可以每次通过循环评估条件。我猜它看起来像这样(尽管我不懂 JavaScript):
_while = (cond, act) => cond() && act() & _while(cond, act)
给定的示例将变为
len = 0; _while(()=>!!("qwerty")[len], ()=>++len);
关于javascript - ES6 备用 While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31575965/
我是一名优秀的程序员,十分优秀!