gpt4 book ai didi

JavaScript:为什么仅当我将返回函数分配给变量时才会发生闭包?

转载 作者:IT王子 更新时间:2023-10-29 03:09:15 24 4
gpt4 key购买 nike

即使在阅读之后You don't know JSJavaScript: The Core我仍然无法理解以下代码的行为。

为什么,当我调用 counter()() 时,我没有得到任何闭包,但是如果我为 counter() 的结果分配一个变量,比如 var getClosure = counter(),然后我在调用 getClosure() 时得到一个闭包?

function counter() {

var _counter = 0;

function increase() { return _counter++ }

return increase;
}

// Double ()() to call the returned function always return 0, so no closure.
counter()() // returns 0
counter()() // returns 0
counter()() // returns 0
counter()() // returns 0

var createClosure = counter();

createClosure() // returns 0
createClosure() // returns 1
createClosure() // returns 2
createClosure() // returns 3

最佳答案

_counter 是函数 counter() 中的局部变量。每次调用 counter() 时都会创建一个新的 _counter

但是 var createClosure = counter() 只调用了函数 1 次,这就是为什么 _counter 不是每次都新创建并“记住”在那里(这就是闭包发生的地方) )

关于JavaScript:为什么仅当我将返回函数分配给变量时才会发生闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47342760/

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