Затенение переменных обычно считается плохой практикой по причинам, которые выделяет ваш код.Трудно поддерживать сферу от одного до следующего.Есть разные способы обойти это, но они в основном полагаются на переименование переменной для локального контекста.
// here i get the HTML elements from <input>.
const min = document.getElementById('min')
const max = document.getElementById('max')
function submitSettings() {
// here i want to validate the values from those HTML elements while maintaining the same variable names (min, max).
function validateSettings() {
let minValue = min.valueAsNumber // My question: How can i reassign global variables locally without changing them in global scope?
let maxValue = max.valueAsNumber // Or: How can i get max variable from the scope from outside (from global scope)?
minValue >= maxValue ? console.log("Not good") : console.log("OK")
}
validateSettings()
min.value = ''
max.value = ''
}
Строго говоря, ключевое слово let
является уникальным в том смысле, что оно создает блочные переменные, поэтому допускается следующее
const global = 1;
const local = () => {
let global = 2;
console.log(global);
}
local(); // logs 2
console.log(global); // logs 1
Но я не думаю, что этоочень хорошая практика
Вы также можете использовать тот факт, что validateSettings
является функцией, и выдавать ей min
и max
аргументы.
// here i get the HTML elements from <input>.
const min = document.getElementById('min')
const max = document.getElementById('max')
function submitSettings() {
// here i want to validate the values from those HTML elements while maintaining the same variable names (min, max).
function validateSettings(min, max) {
min >= max ? console.log("Not good") : console.log("OK")
}
validateSettings(min.value, max.value)
min.value = ''
max.value = ''
}