Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6带循环的箭头表示法_Javascript_Recursion_Ecmascript 6_Arrow Functions - Fatal编程技术网

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

看看代码


希望我能帮忙

听起来你在寻找一个折叠函数(比如array
reduce
),而不是一个只执行副作用的简单“循环”函数。使用当前函数,它将
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@zerkms
a=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
确实更有意义