gpt4 book ai didi

javascript - 基本闭包示例困惑

转载 作者:行者123 更新时间:2023-12-01 00:19:48 25 4
gpt4 key购买 nike

我正在关注 Tyler McGinnis 编写的有关执行上下文、调用堆栈和闭包的教程。

https://www.youtube.com/watch?v=Nt-qa_LlUH0&feature=emb_title

我对闭包示例有点困惑。我理解闭包是指一个函数位于另一个函数内部。我还了解内部函数可以访问父函数参数(如视频中所述)。

我的困惑在于下面的代码中,当调用 makeAdder(5) 时,内部函数在第一次调用时是否也没有被调用? Tyler 似乎建议 makeAdder 在首次调用时从调用堆栈中弹出,只保留内部函数不变。

第二部分我不明白当我们调用add5(2)时这是在调用makeAdder(5)不是吗?当父函数只接受一个参数时,我们如何添加 2 个参数?

如果有人可以一步一步地演示它是如何调用的,那就太好了!

var count = 0;

function makeAdder(x) {
return function inner(y) {
return x + y;
}
}

var add5 = makeAdder(5);
console.log(add5); // what the call to makeAdder returns
count += add5(2);
console.log(count);

最佳答案

when makeAdder(5) is invoked, is the inner function not invoked as well on the first invocation?

不,不是。仅makeAdder当时被调用,并且 makeAdder本身不调用任何电话。它仅返回一个对象,而该对象恰好是一个函数。返回一个函数是在没有实际调用它的情况下完成的。

when we call add5(2) this is invoking makeAdder(5) no?

它没有调用makeAdder(5) 。早些时候add5是调用 makeAdder(5) 的结果,等等add5 那个内部函数。这里发生的特别的事情是,当您调用add5时,恢复了一个“执行上下文”,它代表了makeAdder内部的事务状态。此时它返回了该函数。这实际上意味着当 add5 (内部函数)引用x变量,它x 中找到值目前有makeAdder早些时候曾被召唤过。

How do we add 2 arguments when the parent function only accepts one?

事实上,当我们调用父函数时,第二个参数还不知道,而且我们此时不需要知道它,因为此时内部函数尚未执行片刻。调用父函数的重要一点是我们建立 x 的值。 ,它将“继续存在”,即使它只能通过调用内部函数来访问。

当我们调用内部函数时,我们提供所需的第二参数。然后,内部函数可以将其对 x 的“神奇”引用组合起来。值(当我们进行父调用时提供),以及它本身接收的普通参数。

关于javascript - 基本闭包示例困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515193/

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