gpt4 book ai didi

javascript - 为什么此函数的新调用会创建新的作用域链和新的私有(private)变量?

转载 作者:行者123 更新时间:2023-12-03 12:12:23 25 4
gpt4 key购买 nike

如果我们有这个基本函数(及其闭包):

function counter(){
var n = 0;
return {
count: function() {return n++},
reset: function() {n = 0}
};
}

这是内存中发生的事情吗? (基本上是指向函数对象及其作用域链的指针) function diagram
(来源:geraldleroy.com)

上图正确吗?如果是这样,我不明白为什么这两行代码创建两个新的作用域链和新的私有(private)变量:

var c = counter();

var d = counter();

看起来 c 和 d 都会引用原始函数对象,并且会使用作用域链。

我有点困惑,希望任何人都可以提供对此的任何见解。

谢谢!

最佳答案

作用域链在这里并不真正适用。查找“执行上下文”和“激活对象”以了解调用函数时发生的情况。请参阅 http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ 对这些概念的简要总结。

您的return语句包含一个对象文字。因此,每次调用 counter 时,都会在内存中创建一个新对象。

关于javascript - 为什么此函数的新调用会创建新的作用域链和新的私有(private)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24903631/

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