Javascript 闭包语法

Javascript 闭包语法,javascript,Javascript,为清晰起见进行了更新 有人能解释为什么(3)(10)是这样写的吗?我知道10是作为内部函数的参数提供的,但是为什么在语法上是这样标记的呢?如果我们有三个嵌套函数,参数是否总是按照(3)(10)(20)中的顺序写入?中间变量: function makeIncreaseByFunction(increaseByAmount) { return function (numberToIncrease) { return numberToIncrease + increaseByAmount

为清晰起见进行了更新
有人能解释为什么(3)(10)是这样写的吗?我知道10是作为内部函数的参数提供的,但是为什么在语法上是这样标记的呢?如果我们有三个嵌套函数,参数是否总是按照(3)(10)(20)中的顺序写入?

中间变量:

function makeIncreaseByFunction(increaseByAmount) {
  return function (numberToIncrease) {
    return numberToIncrease + increaseByAmount;
  };
}

makeIncreaseByFunction(3)(10);
var increaseBy3 = makeIncreaseByFunction(3);
var foo = increaseBy3(10);
没有中间变量:

function makeIncreaseByFunction(increaseByAmount) {
  return function (numberToIncrease) {
    return numberToIncrease + increaseByAmount;
  };
}

makeIncreaseByFunction(3)(10);
var increaseBy3 = makeIncreaseByFunction(3);
var foo = increaseBy3(10);
在这两种情况下,第一次调用都会将参数
3
传递给
makeIncreaseByFunction
,结果返回已关闭的内部函数
increaseByAmount
,其值为
3
。无论您是为
makeIncreaseByFunction
返回的中间函数创建变量,还是直接调用它,它都会执行相同的操作


您能否更详细地解释一下如何在var foo=makeIncremaseByFunction(3)(10)中;这10个是进入内部功能?它只是在语法上与Javascript中参数通常传递给我的方式不同ggg


makeIncreaseByFunction(3)
返回一个函数,特别是
makeIncreaseByFunction
中定义的“内部函数”。和所有函数一样,使用
函数(参数)
语法调用它。如果你觉得这样更有意义,你可以这样写:

var foo = makeIncreaseByFunction(3)(10);
这里发生的是
makeIncreaseByFunction(3)
首先被调用并返回⟪内部功能⟫, 然后我们调用
⟪内部功能⟫(10) 

如果你是手工评估(我认为这就是你所说的“语法上”)的话,你可以这样一步一步地想:

( makeIncreaseByFunction(3) )(10)


注意:如果你想成为一名技术人员,我们在这里只做两件事——但除非你有Lambda微积分的背景,否则这可能会让你困惑,而不是帮助你

makeIncreaseByFunction(3)
将返回
function
,因此用10调用它的语法将是
makeIncreaseByFunction(3)(10)

这很容易理解,就好像您有一个函数
foo
(假设makeIncreaseByFunction(3)的返回就是这样一个函数,它们的计算结果是相同的),然后您可以使用
foo(10)
用10调用它

至于10的值是如何被“传递”的,这是一种错误的看待事物的方式

您必须认识到,在Javascript中,函数是第一类对象。 您不是将值传递给内部函数,而是创建一个执行所需操作的函数,然后使用外部参数调用它

这与使用非函数语言在函数中添加变量相同,只是函数可以在运行时动态创建,并且可以设置其定义中任何变量的值以影响其内部一致性


闭包指的是这样一个事实,即创建的函数是一个黑匣子,它隐藏了用于初始化它的变量,尽管仍然使用该变量来增加调用它的值。

var increaseBy3=makeIncreaseByFunction(3)
与(忽略变量的本地存储
increaseByAmount
)完全相同:


当然,现在您可以调用
increaseBy3(10)
并获得
13
increaseBy3
仅引用作为匿名函数的函数,该函数返回其第一个参数加上
3

,通过调用第一个函数,您将返回一个函数。在我看来,这就像一个闭包。看吧,我明白了。正在引用您刚刚发布的链接。。。我同样的问题是。。。进一步解释“var bar=foo(2);//bar现在是闭包.bar(10);”部分的语法情况。10是如何在语法上传递到内部函数的?你所说的语法是什么意思?我认为,一旦语法被解析,任何东西都不会在语法上被传递,引擎会在完全不知道语法的情况下完成所有工作。
()
是一个操作符,可以调用左边的任何函数。请尝试
null()
。明白了吗
+
是一个运算符,用于对左右两边的任何内容求和,然后是
5+5+5
。嗯,
(5+5)+5
。同样地,
whater()()
(whater())()
例如,将
whater
作为函数调用,然后将其结果作为函数调用…谢谢。你能更详细地解释一下如何在
var foo=makeIncreaseByFunction(3)(10)中10正在进入内部函数?它只是在语法上与Javascript中通常传递给我的参数不同。你第一句话的关键词是“返回”。如果你愿意的话,这就是整个事情的转折点。。。这就是内部函数基本上在语法上取代外部函数的地方,所以我看到10是如何作为参数提供的。也许这对我来说是一种糟糕的描述方式,但我只想说我从语法上理解了它是如何结合在一起的。重要的是要理解,在一种具有一流函数的语言中,返回函数或将函数存储在变量中与处理整数或字符串没有什么不同,只是您可以稍后调用该函数。