带循环的ES6箭头表示法

时间:2015-07-21 23:13:19

标签: javascript recursion ecmascript-6 arrow-functions

考虑以下代码:

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

(感谢zzzzBov这个小金块)

是" for" -less loop

以及以下内容:

a=b=>b+1

鉴于这两个片段,以及:

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

我期望会导致z等于10,但是在JavaScript控制台中返回以下"TypeError: c is not a function",如何改变这段代码以确保循环继续,而不必诉诸到whilefor循环?

我认为这是出于教育目的......希望我能够了解可以做些什么......

2 个答案:

答案 0 :(得分:2)

函数f有2个参数: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

希望我能帮忙!

答案 1 :(得分:0)

听起来你正在寻找折叠功能(如数组reduce),而不是简单的循环"仅执行副作用的功能。使用当前功能,您需要做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