У вас нету нигде ссылок на поле в котором бы цена отправлялась бы на сервер или использовалось бы для взаимодействия с другими блоками, кроме блока вывода цены.
Все что делает функция замены цены - изменяет содержимое этого блока: <span id="cena">280</span>
Строка отвечающая за выбор именно данного блока: cena = document.querySelector("#cena");
Если требуется чтобы цена изменялась еще где-нибудь или отправлялась на сервер. Тогда можно допустим сделать скрытое поле в форме. Которое будет изменяться этим скриптом, при этом само будет не видно и не доступно для изменения пользователю.
Думаю следует это понимать так:
Если свойство "window.number" не существует или равно 3, тогдаприсвоить данному свойству значение 1, иначеприбавить к существующему значению 1.
Это можно сделать используя метод .wrap()
Набросал пример.
Картинки не отображаются, так как в коде не заданы адреса. Смотреть через инструменты разработчика.
Скорее нет, чем да.
Javascript должен включаться в работу только при скролле. Отступ должен быть рассчитан либо ранее, либо вообще хеадер должен находиться в статическом позиционировании до работы скрипта. Иначе если скрипты у посетителя выключены, буду неустранимые портаки в отображении сайта. Причем на всех страницах.
При обычном задании функций, такого вида: function f() {return 1;}
При запуске скрипта браузер сначала ищет все определения используемых функций. А только потом запускает выполнение основного скрипта. Это позволяет в том числе все используемые функции определять после основного тела скрипта.
У вас в скрипте имеется два определения такого вида. И соответственно браузер использует последнее из представленных.