是的,這是相同的變量。
我不知道你知道多少。所以,我會詳細解釋一下。 JavaScript中的範圍確定處於功能級別。將函數定義看作樹上的點。樹上的每個點都是一個範圍。使用變量時,只能使用當前範圍內的內容以及祖先到頂端(全局範圍)時可用的內容。這裏有一些規則&例子,可以幫助您更好地理解:
內部函數可以訪問外部函數級的變量
function a() {
var a = 4;
function b() {
alert(a); /* a = 4 */
}
}
參數在同一範圍定義爲,如果他們被定義下面
function a(a) {
// variable "a" is at same scope as the example above
function b() {
alert(a);
}
}
相鄰的功能之一線不可訪問
函數a()是父類。 getValue()和c()是它的孩子。這些孩子不能訪問彼此的變量。
function a() {
function getValue() {
var aValue = 2;
}
function c() {
alert(aValue); /* "aValue" is undefined here */
}
}
定位功能的定義是什麼罪名
這將返回5,如果你運行main();
:
function getValue(returnFunc) {
var a = 7;
alert(returnFunc());
}
function main() {
var a = 5;
getValue(function() { return a; }); // anonymous function becomes "returnFunc"
}
最後,可變首要
(function getValue() {
var a = 5;
(function() {
var a = 7;
alert(a);
})();
alert(a);
})();
我試圖避免爲這些示例使用自調用函數/ IIFE,但我無法幫助自己解決這個問題。我認爲這是最簡單的方法。運行此,你就會得到7,然後5.但是,如果排除對內部的「變種」,「一」 ...
(function getValue() {
var a = 5;
(function() {
a = 7;
alert(a);
})();
alert(a);
})();
你會得到7,7這是因爲「VAR」在記憶中創造一個新的空間。另外,如果名稱與較高範圍內的某個名稱發生衝突,它將作爲一個不同的變量被覆蓋(儘管名稱相同)。
對於一些更多的例子,請參閱:What is the scope of variables in JavaScript?
除非內功能範圍引入了一個新的「錯誤」變量,這將是相同的。 – rlemon
您沒有定義任何其他的'error'變量,所以答案是**是**。 –
正如其他人所說的是,如果它沒有在循環中用'var'重新定義,然而'forEach'循環不能中止。因此,在進入循環之前,應該在回調中檢查錯誤。如果您需要檢查循環中的任何原因,應該採用不同的循環方法。 – ste2425