Javascript 在两个闭包中调用两次的闭包中变量的值是否相同?

Javascript 在两个闭包中调用两次的闭包中变量的值是否相同?,javascript,Javascript,假设这个函数被调用两次,完全独立。因此,将为两个函数fn()创建超时回调,并且这两个函数的闭包中都有一个名为的变量 这是同一个变量还是两个完全独立的变量?为什么? function createFunctionWithTimeout(callback, opt_timeout) { var called = false; function fn() { if (!called) { called = true; ca

假设这个函数被调用两次,完全独立。因此,将为两个函数
fn()
创建超时回调,并且这两个函数的闭包中都有一个名为
的变量

这是同一个变量还是两个完全独立的变量?为什么?

function createFunctionWithTimeout(callback, opt_timeout) {
    var called = false;
    function fn() {
        if (!called) {
            called = true;
            callback();
        }
    }
    setTimeout(fn, opt_timeout || 5000);
    return fn;
}

函数关闭用
var
声明的变量<在您的场景中,调用的code>将是两个完全独立的变量,因为当调用函数
createFunctionWithTimeout
两次时,每次调用都会“创建”一个新变量


如果调用返回函数(
fn
),它将可以访问
调用的
变量,因为它也会关闭它(嵌套函数)。在这种情况下,调用的
不是独立的。它属于通过调用
createFunctionWithTimetout
创建的闭包。函数通过
var
声明的变量关闭<在您的场景中,调用的code>将是两个完全独立的变量,因为当调用函数
createFunctionWithTimeout
两次时,每次调用都会“创建”一个新变量


如果调用返回函数(
fn
),它将可以访问
调用的
变量,因为它也会关闭它(嵌套函数)。在这种情况下,调用的不是独立的。它属于调用
createFunctionWithTimetout

创建的闭包,每次调用时都会创建createFunctionWithTimeout中声明的所有闭包

这就是所谓的功能范围,是这样设计的

阅读这篇文章,并了解JS中的作用域

顺便说一句,要使变量
被调用
对于每次调用都相同,您需要将其设置为全局变量。比如把它放在功能之外。在这种情况下,它们将使用相同的变量


希望这有帮助。

每次调用时都会创建createFunctionWithTimeout中声明的所有内容

这就是所谓的功能范围,是这样设计的

阅读这篇文章,并了解JS中的作用域

顺便说一句,要使变量
被调用
对于每次调用都相同,您需要将其设置为全局变量。比如把它放在功能之外。在这种情况下,它们将使用相同的变量


希望这能有所帮助。

每次调用新函数时,它都会创建自己的独立作用域,而该作用域内的对象仅与该特定作用域相关,换句话说,被调用的变量是两个完全独立的变量。

每次调用新函数时,它创建了自己的独立作用域,而这个作用域内的对象只与这个特定的作用域相关,换句话说,你所调用的变量是两个完全独立的变量