Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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 函数返回自身,出现意外行为_Javascript - Fatal编程技术网

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

  • Eric Elliot有一篇关于
  • 如果你愿意,我可以向你推荐这家图书馆 编写一个更大的应用程序,其中您希望利用功能 接近

  • 您可以重写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
    

  • Eric Elliot有一篇关于
  • 如果你愿意,我可以向你推荐这家图书馆 编写一个更大的应用程序,其中您希望利用功能 接近

  • 你能展示一下这是如何使用的吗?我很难理解你想做什么。您的addg函数只是返回more函数引用。它返回函数,但不调用它。
    more
    功能永远不可用executed@blex我怀疑它是有意被来电者呼叫的,例如,
    addg(5)(
    不清楚你在问什么;听起来你明白这是怎么做的,而运行这个函数就是你期望它做的。你能展示一下这是如何使用的吗?我很难理解你想要做什么。您的addg函数只是返回more函数引用。它返回函数,但不调用它。
    more
    功能永远不可用executed@blex我怀疑它是有意被来电者呼叫的,例如,
    addg(5)(
    不清楚你在问什么;听起来你明白这个函数的作用,并且运行这个函数做了你期望它做的事情。我在浏览器控制台上试了一整天,但没有产生这种行为。现在很有魅力。我想线程可以被关闭/删除,因为代码没有问题。我在浏览器控制台上试了一整天,但没有产生这种行为。现在很有魅力。我认为线程可以关闭/删除,因为代码没有问题。