Javascript ES6带循环的箭头表示法
考虑以下代码位:Javascript ES6带循环的箭头表示法,javascript,recursion,ecmascript-6,arrow-functions,Javascript,Recursion,Ecmascript 6,Arrow Functions,考虑以下代码位: f=(m,c)=>{m?c()&f(--m,c):0} (感谢ZZBOV提供的这个小金块) 这是一个“for”-less循环 以及以下各项: a=b=>b+1 鉴于这两个片段,以及以下事实: z = 0; f(10,a(z)); 我认为这会导致z等于10,但会在JavaScript控制台中返回以下“TypeError:c不是函数”,如何更改此代码以确保循环继续进行,而不必求助于而或进行循环 我问这个是出于教育目的。。。希望我能对所能做的事情有所了解…函
f=(m,c)=>{m?c()&f(--m,c):0}
(感谢ZZBOV提供的这个小金块)
这是一个“for”-less循环
以及以下各项:
a=b=>b+1
鉴于这两个片段,以及以下事实:
z = 0; f(10,a(z));
我认为这会导致z等于10,但会在JavaScript控制台中返回以下“TypeError:c不是函数”
,如何更改此代码以确保循环继续进行,而不必求助于而或进行循环
我问这个是出于教育目的。。。希望我能对所能做的事情有所了解…函数f
包含两个参数:m
,迭代次数,和c
,调用次数。这意味着第二个参数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
看看代码
希望我能帮忙 听起来你在寻找一个折叠函数(比如arrayreduce
),而不是一个只执行副作用的简单“循环”函数。使用当前函数,它将f(5,c)
有效地分解为c();c();c();c();c()代码>您需要执行以下操作
let z = 0;
f(10,()=>{ z = a(z) });
然而,如果您想要创建一个重复应用函数的函数,比如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
非常感谢。我知道我错过了一些东西。。。在循环函数中实现函数声明非常有效。。。谢谢大家!a=b=>b++
毫无意义actually@zerkmsa=b=>b++
当您意识到它相当于a=function(b){return b++;}
a=function(b){return b++;}
也毫无意义时,它就非常有意义了。它与a=function(b){return b;}
@zerkms完全相同,经过编辑后变得更有意义。。。a=b=>b+1
怎么样?a=b=>b+1
确实更有意义