带循环的 ES6 箭头符号

ES6 Arrow Notation with Loops

考虑以下代码:

f=(m,c)=>{m?c()&f(--m,c):0}

(感谢 zzzzBov 的这个小金块)

这是一个 "for"-less 循环

及以下:

a=b=>b+1

鉴于这两个片段,以及以下事实:

z = 0; f(10,a(z));

我希望 z 等于 10,但是 JavaScript 控制台中的 returns 是以下 "TypeError: c is not a function",如何更改此代码以确保循环继续进行,而不必求助于 whilefor 循环?

我问这个是出于教育目的...希望我能深入了解可以做什么...

函数 f 有两个参数:m,要迭代的次数,和 c,要调用 m 次的函数。这意味着第二个参数 c 应该是一个函数。例如:

f=(m,c)=>{m?c()&f(--m,c):0}


f(15, function() {
 console.log("Hello")
})

这将遍历 c 函数 15 次,调用 console.log 15 次。

当然,要在第二位实现你想要的,你可以这样:

z=0, f(10,()=>z++)

这将是一个常规箭头函数,将 z 增加 1

看看代码on babel

希望我能帮到你!

听起来您正在寻找折叠函数(如数组 reduce),而不是仅执行副作用的简单 "looping" 函数。使用当前函数,将 f(5, c) 脱糖以有效地 c(); c(); c(); c(); c(); 你需要做

let z = 0;
f(10,()=>{ z = a(z) });

但是如果你想创建一个重复应用函数的函数,比如a(a(a(a(a(…))))),你需要写

let times = (n, f, s) => n>0 ? times(n-1, f, f(s)) : s;

这样你就可以做到

let a = b=>b+2
times(5, a, 0) // 10