是的,这是相同的变量。
我不知道你知道多少。所以,我会详细解释一下。 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