gpt4 book ai didi

javascript - 为什么下面的 JavaScript 函数不是闭包?

转载 作者:行者123 更新时间:2023-11-30 15:39:03 25 4
gpt4 key购买 nike

var x = 5;

function f0() {
return function () {
var y = 10;
var z = x + y;
console.log('x + y is: ' + z);
}
}

var myFunc = f0();

myFunc();

x = 10;

myFunc();

在上面的例子中,我预计 x + y is: 15 也会在第二次打印。因为,据我所知,f0 返回的是一个闭包。我认为闭包会在定义时对其环境中的变量进行快照。因此,我认为将 x 更改为 x = 10; 不会影响闭包中使用的自由变量。

但显然我错了。你能告诉我为什么改变 x 会改变从 f0 返回的函数的结果吗?

  • 是因为 f0 返回的不是闭包吗?
  • 是因为闭包没有记录返回范围内的变量值吗?
  • 是因为别的原因吗?

最佳答案

Is it because what is returned from f0 is not a closure?

没有。在 JavaScript 中,每个函数都是一个闭包。

Is it because a closure does not record the values of the variables at the scope it is being returned to?

是的。闭包不记录,而是获取当前状态的快照。它只是记录对范围的引用。这是它定义的范围,而不是它返回的范围。

关于javascript - 为什么下面的 JavaScript 函数不是闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41086346/

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