Ваш пример «работает» в том смысле, что он отображает значение диапазона, как вы описали.Это не обновляет значение, потому что ваш код JS будет выполняться только один раз при запуске.Чтобы выполнить ваш код и обновить вывод при каждом изменении ввода диапазона, используйте прослушиватель событий:
var slider = document.getElementById("range");
var output = document.getElementById("value");
var outputVarNo = document.getElementById("outputVar");
let update = () => output.innerHTML = slider.value;
slider.addEventListener('input', update);
update();
<input type="range" min="1" max="100" value="50" class="slider" id="range">
Value: <span id="value"></span>
Value: <span id="outputVar"></span>