Если вы действительно беспокоитесь о производительности, $ ('# fixed') будет вызывать большее беспокойство. Вы должны поместить результат этого в переменную, если #fixed не будет отличаться каждый раз, когда вы запрашиваете его.
Вопрос о добавлении и удалении класса в основном "зависит". Что на самом деле делает добавление и удаление класса? Меняет ли это макет страницы или вы используете его как флаг для чего-то еще? Если это меняет макет страницы, и тогда у вас нет выбора. Если этого не произойдет, вы можете вместо этого использовать метод .data для сохранения состояния, что позволит избежать reflow (основная проблема производительности с добавлением / удалением классов).
Меня также беспокоит, сколько раз ваша функция check_scroll будет вызываться на практике. Вы не отменяете предыдущие события setTimout и, таким образом, вы получите кучу вызовов setTimeout. Вероятно, вы хотите что-то еще как:
(function() {
var timeout = null, fixed = $('#fixed'), win=$(window),
check_scroll = function() {
var scroll = win.scrollTop();
fixed.toggleClass("fixed", scroll > 100);
timeout=null;
}
win.scroll(function() {
if (timeout) {
// only do once every 50ms
return;
}
timeout = setTimeout(check_scroll, 50);
});