我在javascript中有一个问题,函数本地的同一个变量的多个实例是否存在模拟,每个实例都有自己的值?这可能与闭包有关,因为函数中的变量可能有一个值,但在该函数中定义的函数内部可能有另一个值?
答案 0 :(得分:0)
嗯,不,变量只能包含一个值,而一个函数每个名称只能有一个变量。您不能在同一范围内拥有多个变量实例。
但是,您可以拥有"相同"的多个实例。变量在"相同"的不同实例中范围。调用函数时很常见:
function example(x) {
console.log(x);
}
example(1);
example(2);
此处我们有两个变量x
的实例,分别包含不同的值(1
和2
)。当然,这里两个变量不会同时存在。然而,当我们使用闭包时,就会发生这种情况:正如您所观察到的那样:
function makeLogger(x) {
return function logger() {
console.log(x);
}
}
let loggers = [];
for (const i of [1, 2, 3]) {
loggers[i] = makeLogger(i);
}
const [log1, log2, log3] = loggers;
log1();
log3();
在这个例子中,三个记录器函数中的每一个都有自己的变量x
,并且有自己的值。