Я добавил несколько комментариев к вашему коду, это может очистить ваши сомнения.
var prevScrollPos = window.pageYOffset;
// here if we assume the prevScrollPos as 0 then when the user scrolls the function gets executed.
window.onscroll = function() {
var currentScrollPos = window.pageYOffset;
// Here, say currentScrollPos = 50px; so if condition fails and else block gets executed.
if (prevScrollPos > currentScrollPos) {
document.getElementById("navbar").style.top = "0";
} else {
document.getElementById("navbar").style.top = "-50px";
}
// since the prevScrollpos is being updated here, it will be greater than 0(will be 50px) next time.
prevScrollpos = currentScrollPos;
}
и когда пользователь прокручивает вверх, функция вызывается снова, и на этот раз условие if удовлетворяется, потому что 50px (prevScrollPos) будет быть больше 0 (при условии, что он прокрутил весь путь вверх).