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中的作用域 顺便说一句,要使变量
被调用
对于每次调用都相同,您需要将其设置为全局变量。比如把它放在功能之外。在这种情况下,它们将使用相同的变量
希望这能有所帮助。每次调用新函数时,它都会创建自己的独立作用域,而该作用域内的对象仅与该特定作用域相关,换句话说,被调用的变量是两个完全独立的变量。每次调用新函数时,它创建了自己的独立作用域,而这个作用域内的对象只与这个特定的作用域相关,换句话说,你所调用的变量是两个完全独立的变量