Потому что нужно разместить скрипт в конце файла, когда все элементы будут засчитаны:
.....
<script src="script.js"></script>
</body>
</html>
Либо в скрипте использовать событие DOMContentLoaded, которое срабатывает в конце загрузки документа:
Кодvar select, html;
function update(bgColor, textColor) {
html.style.backgroundColor = bgColor;
html.style.color = textColor;
}
window.addEventListener('DOMContentLoaded', e=>{
select = document.querySelector('select');
html = document.querySelector('html');
document.body.style.padding = '10px';
select.onchange = function() {
( select.value === 'black' ) ? update('black','white') : update('white','black');
}
});