Да, это одно и то же переменная.
Я не уверен, насколько вы знаете. Итак, я подробно объясню. Область видимости в 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. Это происходит потому, что «вар» создает новое пространство в памяти. Кроме того, если есть конфликт имен с чем-то в более высокой области, он становится переопределенным как другая переменная (несмотря на одно и то же имя).
Для более некоторые примеры, пожалуйста, см: What is the scope of variables in JavaScript?
, если внутренняя сфера функция не вводит новую переменную «Ошибка», то это будет то же самое. – rlemon
У вас нет другой переменной 'error', поэтому ответ будет ** да **. –
Как утверждают другие, да, если он не переопределен с помощью 'var' в цикле, однако цикл' forEach' не может быть прерван. Поэтому проверка ошибки должна выполняться в обратном вызове, прежде чем вы войдете в цикл. Если вам нужно проверить цикл по какой-либо причине, следует использовать другой метод петлирования. – ste2425