gpt4 book ai didi

javascript - 闭包语法

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:46 25 4
gpt4 key购买 nike

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

makeIncreaseByFunction(3)(10);

为清楚起见而更新有人可以解释为什么 (3)(10) 是这样写的吗?我知道 10 是作为内部函数的参数提供的,但为什么在语法上这样表示?如果我们有三个嵌套函数,参数是否总是按照 (3)(10)(20) 中的顺序编写?

最佳答案

有中间变量:

var increaseBy3 = makeIncreaseByFunction(3);
var foo = increaseBy3(10);

没有中间变量:

var foo = makeIncreaseByFunction(3)(10);

在这两种情况下,第一次调用都会传递参数 3makeIncreaseByFunction , 结果它返回关闭了 increaseByAmount 的内部函数值为 3 .是否为makeIncreaseByFunction返回的中间函数创建变量,或者直接调用它,它会做同样的事情。


Can you explain a little bit more detail about how in var foo = makeIncreaseByFunction(3)(10); the 10 is getting to the inner function? It just looks syntactically different from how arguments usually get passed in Javascript to me. – ggg

makeIncreaseByFunction(3)返回一个函数,特别是 makeIncreaseByFunction 中定义的“内部函数” .与所有函数一样,您可以使用 function ( arguments ) 调用它句法。如果这样对您来说更有意义,您可以这样写:

( makeIncreaseByFunction(3) )(10)

这里发生的是makeIncreaseByFunction(3)首先被调用并返回⟪内部函数⟫,然后我们调用⟪inner function⟫(10) .

如果您手动评估它(我认为这就是您所说的“语法上”的意思),您可以认为它是这样一步一步发生的:

// Original invocation
var foo = makeIncreaseByFunction(3)(10);

// Substitute the definition of makeIncreaseByFunction
var foo = (function (increaseByAmount) {
return function (numberToIncrease) {
return numberToIncrease + increaseByAmount;
};
})(3)(10);


// Apply the parameter 3
var foo = (function (numberToIncrease) {
return numberToIncrease + 3;
})(10);


// Apply the parameter 10
var foo = 10 + 3;

// Final result
var foo = 13;

注意:如果您想成为技术人员,我们在这里所做的只是两个 Beta reductions — 但除非你有 Lambda 微积分的背景,否则它可能会让你感到困惑而不是帮助你!

关于javascript - 闭包语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17982637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com