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爲什麼這段代碼有兩個不同的結果?
每次調用s1後,addCount引用由該調用創建的閉包中引用的count變量。所以addCount()被調用時引用了result2引用的閉包中的count變量 – antlersoft
這個問題正在討論中,但我想直接引用你的(Rodney_Dian)注意:你接受的答案是不正確的,會混淆你的理解進一步。您可以通過在代碼末尾添加更多對'result1()'和'result2()'的調用來證明它是錯誤的。你會發現無論你調用多少次或以什麼順序調用它們,每次調用'result1()'都會返回0,並且每次調用'result2()'都會返回1.(除非再次調用'addCount()' ,這會進一步增加'result2()',同時使'result1()'仍然爲0)。閱讀下面的其他答案,看看爲什麼。 –