var addCount;
function s1() {
var count = 0;
addCount = function() {
count++;
};
function s12() {
console.log(count)
}
return s12
}
var result1 = s1();
var result2 = s1();
addCount();
result1(); // count = 0;
result2(); // count = 1;
In the picture I marked the puzzled place 然后,下一步将以这种方式显示 This is where I am really puzzled
最佳答案
因为 result
是一个函数,被声明为调用 s1
函数的结果。调用 s1
返回 s12
函数,该函数使用一个名为 count
的变量,该变量声明在比它自身更高的级别(作用域)(这是称为“自由变量”)。
当在生命周期比声明自由变量的函数长的函数内部使用自由变量时, "closure" 是围绕该自由变量创建的,即使在声明它的函数终止后,它仍保留在范围内。
当您第一次调用 result
时,count
会加一,并且该值会保留在内存中,因此当您第二次调用它时,您将使用最后一个值。
关于javascript - 为什么这段代码有两个不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42372688/