我的問題實際上更多的是關於JavaScript中的範圍,而不是關閉。JavaScript中的範圍和閉包問題
讓我們以下面的代碼:
var f = function() {
var n = 0;
return function() {
return n++;
};
}();
console.log(f());
console.log(f());
上面的代碼輸出:
0
1
正如你可以從上面的代碼中看到,f
(自調用)返回一個函數,創建關閉n
。
因此,它可以使用匿名函數;因此,我然後用命名函數試了一下:
var f2 = function() {
return n++;
};
var f = function() {
var n = 0;
return f2;
}();
console.log(f2()); // <= [n is not defined]
上面的代碼不工作,與錯誤n is not defined
。我認爲這是一個範圍界定問題;但我不明白爲什麼;
爲什麼範圍與匿名內部函數相同,但不能與命名的外部函數一起使用?
另外,在第二個例子中,我是否創建了一個閉包?