JavaScript如何在函数返回时保存局部范围变量

JavaScript如何在函数返回时保存局部范围变量,javascript,function,return,Javascript,Function,Return,正如题目所说,我不明白它是如何工作的。下面是我的简单示例: function bar () { var a = 0; return { baz: function () { console.log(a++); } } } var foo = bar(); foo.baz() // 0 foo.baz() // 1 foo.baz() // 2 我想当我使用“bar”函数时,它应该返回我这个对象 { baz:

正如题目所说,我不明白它是如何工作的。下面是我的简单示例:

function bar () {
    var a = 0;
    return {
        baz: function () {
            console.log(a++);
        }
    }
}
var foo = bar();
foo.baz() // 0
foo.baz() // 1
foo.baz() // 2
我想当我使用“bar”函数时,它应该返回我这个对象

{
    baz: function () {
        console.log(0++);
    }
}

其中包含替换的变量,执行后应删除所有局部变量,但不是!变量“a”已保存并可以使用,因此我不了解它。有人能给我解释一下吗,请仔细阅读一下JavaScript闭包:

闭包是引用独立(自由)变量的函数 (本地使用但在封闭范围内定义的变量)。 换句话说,这些函数“记住”了 他们是被创造出来的

资料来源:


这将帮助您更好地理解这一点,对每个JS开发人员都非常重要。

变量不会消失,只要它们仍然从某个地方引用,即使它们的包含函数返回。值得注意的是,JS中的每个函数在技术上都是一个闭包。