带循环的 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"
,如何更改此代码以确保循环继续进行,而不必求助于 while
或 for
循环?
我问这个是出于教育目的...希望我能深入了解可以做什么...
函数 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
考虑以下代码:
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"
,如何更改此代码以确保循环继续进行,而不必求助于 while
或 for
循环?
我问这个是出于教育目的...希望我能深入了解可以做什么...
函数 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