Почему JS не видит переменную?
Помогите разобраться, изучаю JS, столкнулся со следующей проблемой в коде:
function fieldsShowWhenObjChanged() {
var filterObjTypeVal = $('#FilterObjectType').val();
$('#case_number').css('display', filterObjTypeVal == "CLAIM" ? '' : 'none');
$('#srv_services').css('display', filterObjTypeVal == "SRV_SERVICE" ? '' : 'none');
if (filterObjTypeVal == "SRV_SERVICE") {
let takeUnPublishedServices = true;
$("#FilterServiceCode").AjaxMultipleSelectHierarchy({
selectAllText: "Выбрать все Услуги",
selectedAll: "Выбраны все Услуги",
placeholder: 'Выберите Услуги',
includeParent: true,
baseClass: "ms",
link: '@Url.Action(nameof(ManageController.GetItems))',
query: {
type: "services_with_subservices",
takeUnPublishedServices: takeUnPublishedServices,
},
onItemCreate: function ($item) {
sliceText($item.find('div').addClass('sliceText_v2'));
},
});
$("#IsCheckTakeUnPublishedServices").prop('checked', takeUnPublishedServices);
}
}
в данном случаи ошибка не возникает, так как переменная let takeUnPublishedServices = true объявлена явно, но если переписать код вот так, то будет ругаться, что не видит переменную, почему, я ведь ей в query передаю то-же самое значение, в чем разница между передачей значения так и объявлением переменной?
function fieldsShowWhenObjChanged() {
var filterObjTypeVal = $('#FilterObjectType').val();
$('#case_number').css('display', filterObjTypeVal == "CLAIM" ? '' : 'none');
$('#srv_services').css('display', filterObjTypeVal == "SRV_SERVICE" ? '' : 'none');
if (filterObjTypeVal == "SRV_SERVICE") {
$("#FilterServiceCode").AjaxMultipleSelectHierarchy({
selectAllText: "Выбрать все Услуги",
selectedAll: "Выбраны все Услуги",
placeholder: 'Выберите Услуги',
includeParent: true,
baseClass: "ms",
link: '@Url.Action(nameof(ManageController.GetItems))',
query: {
type: "services_with_subservices",
takeUnPublishedServices: true,
},
onItemCreate: function ($item) {
sliceText($item.find('div').addClass('sliceText_v2'));
},
});
$("#IsCheckTakeUnPublishedServices").prop('checked', takeUnPublishedServices);
}
}
Ответы (2 шт):
Ругается на строчку
$("#IsCheckTakeUnPublishedServices").prop('checked', takeUnPublishedServices);
в которой и используется переменная, определение которой ты убрал.
Так как переменная не объявлена - видишь ошибку об этом.
Если убрать эту строчку, то и ошибка пропадет, что покажет отсутствие разница между передачей значения напрямую либо в виде переменной
Предположу, что ошибка возникает на строке
$("#IsCheckTakeUnPublishedServices").prop('checked', takeUnPublishedServices);
Оно и не удивительно. Ведь переменная takeUnPublishedServices не объявлена.
Если вы думаете, что тут:
query: {
type: "services_with_subservices",
takeUnPublishedServices: true,
},
вы объявляете переменую, то это не так. Вы передаёте в свойство query объект с ключами у которых имя type и takeUnPublishedServices. Никакого объявления переменных тут нет.
Пример
let test = {
field1: 555,
field5: 'testy'
}
Вы же не будете утверждать, что тут объявляются переменные field1 и field5 ?