Расширение области видимости переменных - PullRequest
0 голосов
/ 20 февраля 2020

В течение для l oop (т.е. .each()) мне нужно установить переменную openvalue в 1, если условие выполнено. Затем мне нужно получить доступ к значению этой переменной в конце l oop. Независимо от ситуации, когда я печатаю переменную в консоли, результат всегда равен 0. Я знаю почему (область видимости переменной), но мне интересно, как я могу изменить свой код, чтобы, если openvalue было установлено в 1 в forl oop, это значение будет иметь постоянство за пределами фор oop.

var openvalue = 0; //sets default value
textinputs.each(function () {
    var attr = $(this).attr('disabled');
    if (attr == undefined || attr == false) {
        var openvalue = 1; // if there is an input that is not disabled, set this value to 1
    }
});
console.log(openvalue);

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

В вашем l oop вы объявляете новую переменную с тем же именем. Вместо этого вы хотите присвоить значение уже объявленной переменной. Итак, «openvalue = 1» вместо «var openvalue = 1»:

var openvalue = 0; //sets default value
textinputs.each(function () {
var attr = $(this).attr('disabled');
if (attr == undefined || attr == false) {
    openvalue = 1; // if there is an input that is not disabled, set this value to 1
}
});

console.log(openvalue);
0 голосов
/ 20 февраля 2020

Проблема существует только потому, что вы повторно объявили переменную openvalue с помощью оператора var, который создает вторую переменную openvalue в новой области действия функции. Вот ваш код в фрагменте ниже:

var openvalue = 0; //sets default value
var textinputs = $('input');
textinputs.each(function () {
    var attr = $(this).attr('disabled');
    if (attr == undefined || attr == false) {
        var openvalue = 1; // if there is an input that is not disabled, set this value to 1
    }
});
console.log(openvalue);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input />
<input disabled />
<input />

Здесь в нашем решении мы опускаем второе объявление и просто ссылаемся на оригинал openvalue в родительской области видимости, и получаем ожидаемое поведение:

var openvalue = 0; //sets default value
var textinputs = $('input');
textinputs.each(function () {
    var attr = $(this).attr('disabled');
    if (attr == undefined || attr == false) {
        openvalue = 1; // if there is an input that is not disabled, set this value to 1
    }
});
console.log(openvalue);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input />
<input disabled />
<input />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...