Javascript 函数返回自身,出现意外行为
预期的行为是从多个调用中添加,直到到达空调用为止,但代码并不是这样做的。到底发生了什么Javascript 函数返回自身,出现意外行为,javascript,Javascript,预期的行为是从多个调用中添加,直到到达空调用为止,但代码并不是这样做的。到底发生了什么 函数addg(第一个){ 功能更多(下一步){ 如果(下一个===未定义){ 先返回; } 第一个+=下一个; 回报更多; } 如果(第一个!==未定义){ 回报更多; } } //预期行为: 控制台日志(addg(3)(2)(4)();//9这看起来是一个聪明的方法来启用: addg(1)(2)(3)(4)() // 10; returnmore行返回一个函数;函数的内部主体引用第一个变量,也就是说它“
函数addg(第一个){
功能更多(下一步){
如果(下一个===未定义){
先返回;
}
第一个+=下一个;
回报更多;
}
如果(第一个!==未定义){
回报更多;
}
}
//预期行为:
控制台日志(addg(3)(2)(4)();//9
这看起来是一个聪明的方法来启用:
addg(1)(2)(3)(4)() // 10;
returnmore
行返回一个函数;函数的内部主体引用第一个变量,也就是说它“关闭”了该变量。这就是当您调用返回函数时,它如何知道first
的值,并可以添加到该值中。more
函数也可以返回自身,因此每次调用addg
(直到传递未定义或忽略参数),它都会返回一个可以再次调用的函数
(请注意,这不一定是解决问题的最佳方法,但它确实证明了您可以从函数返回函数)。这看起来是一种聪明的方法,可以启用:
addg(1)(2)(3)(4)() // 10;
returnmore
行返回一个函数;函数的内部主体引用第一个变量,也就是说它“关闭”了该变量。这就是当您调用返回函数时,它如何知道first
的值,并可以添加到该值中。more
函数也可以返回自身,因此每次调用addg
(直到传递未定义或忽略参数),它都会返回一个可以再次调用的函数
(请注意,这不一定是解决问题的最佳方法,但它确实证明了您可以从函数返回函数)。您可以重写curried
addg
函数,以便在最终结果函数调用之前获取任意数量的参数,例如:
函数addg(…args){
返回(…更多)=>{
if(more.length==0){
返回参数减少((acc,val)=>acc+val,0)
}
返回addg.apply(addg,args.concat(更多))
}
}
控制台日志(addg(2)(3)(4)()/=>9
console.log(addg(2,3)(4)()/=>9
log(addg(2,3,4)()/=>9
您可以重写curried
addg
函数,以便在最终结果函数调用之前获取任意数量的参数,例如:
函数addg(…args){
返回(…更多)=>{
if(more.length==0){
返回参数减少((acc,val)=>acc+val,0)
}
返回addg.apply(addg,args.concat(更多))
}
}
控制台日志(addg(2)(3)(4)()/=>9
console.log(addg(2,3)(4)()/=>9
log(addg(2,3,4)()/=>9
你能展示一下这是如何使用的吗?我很难理解你想做什么。您的addg函数只是返回more函数引用。它返回函数,但不调用它。
more
功能永远不可用executed@blex我怀疑它是有意被来电者呼叫的,例如,addg(5)(
不清楚你在问什么;听起来你明白这是怎么做的,而运行这个函数就是你期望它做的。你能展示一下这是如何使用的吗?我很难理解你想要做什么。您的addg函数只是返回more函数引用。它返回函数,但不调用它。more
功能永远不可用executed@blex我怀疑它是有意被来电者呼叫的,例如,addg(5)(
不清楚你在问什么;听起来你明白这个函数的作用,并且运行这个函数做了你期望它做的事情。我在浏览器控制台上试了一整天,但没有产生这种行为。现在很有魅力。我想线程可以被关闭/删除,因为代码没有问题。我在浏览器控制台上试了一整天,但没有产生这种行为。现在很有魅力。我认为线程可以关闭/删除,因为代码没有问题。