Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Есть ли смысл использовать Immutable вместе с React?

Лучший ответ:
Так и не цепляйтесь именно за Immutable.js, суть то в том, что данные должны быть неизменяемыми, а уж при помощи какой либы вы этого добьетесь зависит от вас, можете вообще просто Object.assign юзать (собственно object spread plugin этим и занимается) и тоже будете правы. Если проект большой, то я бы вам рекомендовал придерживаться парадигмы с Immutable данными, головной боли точно станет меньше. Насчет рендеринга само по себе это не какого прироста не даст, но благодаря тому, что вы получаете полный контроль над изменениями ваших объектов, вы можете грамотно использовать shouldComponentUpdate и вот тогда это может дать вам не хилый буст.

Худший ответ:
у преимущества библиотеки immutable над Object.assign ( or spread operator ) есть имя - structural data sharing. 
Опять-таки всё сводится к увеличению буста. Если у вас настолько сложный проект, что эффективности нативных вариантов недостаточно - подключайте immutable смело. В противном случае - нет необходимости.
Вопрос: Обязательно ли изучать Unit тестирование на должность junior asp.net mvc developer?

Лучший ответ:
Обычно на должность junior'а просят хотя бы иметь представление о том, что это такое, и как это реализуется на базовом уровне.
Для начала можете попробовать написать парочку самых простых тестов. Правда перед написанием unit-тестов ещё необходимо узнать, что такое слабое связывание и как оно реализуется.
Достаточно просто о Unit-тестировании рассказывается в книге "Pro ASP.NET MVC 5" (A. Freeman)
Также можно посмотреть уже всем известный metanit: metanit.com/sharp/mvc5/18.1.php
Когда придёт время изучать эту тему подробнее, можете обратить внимание вот на эту книгу:
"Искусство автономного тестирования" - Р. Ошероув

Худший ответ:
Нет конечно
Вопрос: Вёрстка с учётом глюков под ie7-ie8 — актуальна ли?

Лучший ответ:
Вообще не актуально, мы даже под IE9 не тестируем. Гораздо полезнее позаботиться о людях с ограниченными возможностями или с плохим зрением

Худший ответ:
Если продукт не предназначен для киосков на XP, то можно смело вывешивать заглушку. Ибо современный объём JS не будет способствовать положительному опыту.
Вопрос: Долгий wp_insert_post() при массовой вставке (создании) записей в WordPress — как ускорить?

Лучший ответ:
Решение найдено. Посмотрел в логи MySQL, а там куча запросов вида:SELECT post_name FROM wp_posts WHERE post_name = 'труляля-765' AND post_type = 'post' AND ID != 0 LIMIT 1
далее в массиве для wp_insert_post обратил внимание на 'post_name' => '',
тот самый slug используемый в URL'е (ЧПУ WordPress'а).
быстренько добавил генератор уникальных значений post_name и запросы полетели (максимум 0,5 секунд).

Худший ответ:
проверь как ведет себя MySQL при вставке когда запускаешь wp_insert_post, включи slow log
м.б. как временный перенести таблицы в оперативу, а потом обратно на диск.
так же смотри чего в php происходит.
Вопрос: Как часто у вас ломался и падал Linux Mint?

Лучший ответ:
Пользуюсь mint более года. И дома и на работе. Не могу вспомнить чтоб были какие-то серьезные проблемы. Считаю, что mint работает надежно.

Худший ответ:
Mint не использую, сижу на "чистой" убунте и не жужжу. "Падало" оно наверное во времена до 10.04, хотя я просто не помню было ли оно вообще.  Единственное что запомнилось - как я Ubuntu Server 8.04 обновлял, в то время как (как выяснилось позже) у меня на винте отходил контакт на +12V Molex разъёма, отчего винт периодически "отваливался", теряя данные в буфере (ещё не записанные на поверхность), что привело к повреждению системных файлов и понадобилась переустановка (уже на Debian).
Вопрос: Проблема browser-sync. Как решить?

Лучший ответ:
Можно начать с установки:
1. Node.js (последней версии);
2. Microsoft Visual C++ 2008 Redistributable Package (x86);
3. Microsoft .NET Framework 4.5.2.
На всякий случай перезапустить систему, а затем смотреть чего еще не хватает.
Также проверить правильно ли установлен и настроен Python, можно по этой статье.

Худший ответ:
Странно, он просит python у вас.
Вопрос: Как сделать плавное возвращение меню?

Лучший ответ:
Чуть по сложнее нужно: https://jsfiddle.net/IonDen/s33v2roh/var show = false;
var $nav = $("nav");

function showFixed() {
    if (show) {
        return;
    }

    show = true;

    $nav.hide().addClass("nav-fixed").slideDown();
}

function hideFixed() {
    if (!show) {
        return;
    }

    show = false;

    $nav.slideUp(function() {
        $nav.removeClass("nav-fixed").slideDown();
    });
}

$(window).scroll(function() {
    var scroll = $(window).scrollTop();

    if (scroll >= 350) {
        showFixed();
    } else {
        hideFixed();
    }
});

Худший ответ:
jQuery(function() {
    $(window).scroll(function() {
        var scroll = $(window).scrollTop();

        if (scroll >= 350) {
            $("nav").addClass("nav-fixed");
        } else {
            $("nav").removeClass("nav-fixed");
        }
    });
});
для плавности добавьте с стили классов свойство transition-duration
Вопрос: Программа скриншотер на линукс на чем писать?

Лучший ответ:
Для саморазвития лучше освоить штатный скриншотер.
И сложностей никаких, и для обсуждения "go vs java" не надо искать дурацких предлогов.

Худший ответ:
На десктопном линухе обычно пишут на том, на чем работает основной DE - для KDE это Qt, для GNOME - GTK. Впрочем ничего не мешает писать на том или ином тулките и в других средах. Тащить в систему интерпретатор байт-кода жабы или го (не знаю даже, как он обрабатывается) ради такой скромной вещи как скриншотер никто не будет.
Вопрос: Кто где делает заметки по программированию?

Лучший ответ:
Большинство вещей сегодня не нужно никак запоминать у себя. Все что нужно, научиться правильно искать.
Например большинство вопросов по JavaScript элементарно ищется простым запросом в гугле, например "mdn promise", или "javascript ru promise". Все что нужно - знать правильные сайты и использовать название этого сайта как префикс в поисковой строке.
Для ссылок на ресурсы достаточно создать хорошую структуру закладок в браузере (тот же хром хранит все закладки в облаке, так что не потеряются).
Для кода лучший сервис - GitHub + Gist.

Худший ответ:
Завёл кучу "склерозников" в гуглодоке, а сырцы и книжки храню во всяких "облаках" типа дропбокса, Я.Диска и пр.
Вопрос: Ноутбук для Python-программиста (не стационарный)?

Лучший ответ:
Если можете себе позволить, то берите MacBook Pro Retina.
Если нет, то - Fudjitsu.Вот подборка на Yandex Market(для верхнего ценового сегмента)
 Если хотите что-нибудь по-бюджетней: ни в коем случае не убирайте SSD!

Худший ответ:
Перемещаюсь с ASUS N750
В сумке на спине не тяжело, но зато здоровый хороший экран 17
Для меня это было первоочередной важности
Вопрос: Дублирование блоков при верстке адаптивных дизайнов. Есть ли минусы?

Лучший ответ:
Может ли это принести какой нибудь вред в СЕО? artur43211 если сделаете все правильно, то адаптивная верстка принесет Вашему сайту только пользу. Поисковики сейчас достаточно хорошо распознают и разделяют разный контент, в том числе предназначенный для отображения на разных устройствах.
Почитайте официальное руководство от Google про адаптивный дизайн и SEO для мобильных.

Худший ответ:
Ну если там не текст а менюшки то по поисковики в целом их нормально сейчас распознают и не учитывают. А вообще media в css и нет проблем с дублированием меню...
Вопрос: Что это за знак над буквой?

Лучший ответ:
Если это отрицание, но ведь они выглядят так ¬?
А еще оно выглядит так: "!". Но от этого не перестает быть отрицанием. Знак "¬" перед выражением идентичен горизонтальной черте над выражением.

Худший ответ:
ОтрицаниеЧерта сверху
Вопрос: Как изменить серийный номер тома у диска c exFAT?

Лучший ответ:
Судя по всему готовых утилит нет, в доке на 83 странице есть немного полезной инфы

Худший ответ:
Решение для exFAT: 
Небольшая программка Volume Serial Number Editor 2.02.34 для изменения серийного номера раздела диска. В отличие от volumeid от Sysinternals и подобных  работает также с exFAT, NTFS, FAT, FAT32. Интерфейс программы не переведён на русский язык, но вполне интуитивно-понятен и прост. В демо-версии (до регистрации) меняет volumeID только на "1234-5678". Полная версия не имеет таких ограничений. Crack в комплекте.

Volume Serial Number Editor 2.02.34 + Portable + crack (full) ~ 4 Mb
Скачать:  https://yadi.sk/d/6BtHlyI63NZXhY
Пароль на архив: softoroom
Вопрос: Как лучше отправлять формы?

Лучший ответ:
Если нужно выполнить валидацию формы на сервере, без перезагрузки страницы, то используется второй вариант.

Худший ответ:
1) Отправка просто через форму перезагружает страницу. Работает в принципе во всех случаях.
2) Отправлять форму через ajax удобно при валидации введенных полей. Однако это не сработает, если у клиента будет отключен JavaScript (такого я еще не встречал).
Тут скорее вопрос не "Как лучше?", а "Как надо?" в контексте какой-то задачи. В целом, используйте первый вариант, потом, если будет надо, переделаете под второй.
Вопрос: Чем отличается вторая форма нормализации от третьей?

Лучший ответ:
Третья нормальная форма не допускает наличия транзитивных зависимостей.
Допустим, у нас есть БД автосалона. Имеется отношение Автомобиль(СерийныйНомер, Модель, Цена). Имеется зависимость СерийныйНомер -> Модель (т.е. для каждого авто мы всегда точно знаем модель этого авто). Также, так как у нас фирменный автосалон, а не продажа подержаных авто, цена автомобиля зависит только от его модели (т.е. все новые авто одной и той же модели будут стоить одинаково, всякие комплектации в расчёт не берем). Т.е. имеется зависимость Модель -> Цена.
Т.к. по серийному номеру мы можем определить модель, а по модели - цену, то цена также зависит от серийного номера: СерийныйНомер -> Цена. Однако эта зависимость транзитивная: цена зависит не непосредственно (!) от СерийногоНомера, а от Модели. Следовательно, это отношение не находится в третьей нормальной форме (хотя находится во второй). Для приведения отношения в 3НФ его нужно разбить на два - МодельАвтомобиля(СерийныйНомер, Модель) и ЦенаМодели(Модель, Цена).
Следует заметить, что если бы предметная область определяла бы иные зависимости, то и рассмотренное отношение могло быть в другой НФ. Например, если бы у нас все-таки продавались подержаные автомобили, и цену на каждый из них мы бы устанавливали отдельно, то зависимости Модель -> Цена уже б не было, а была бы прямая (нетранзитивная зависимость) СерийныйНомер -> Цена, и отношение подходило под критерии третьей нормальной формы.

Худший ответ:
https://ru.wikipedia.org/wiki/Вторая_нормальная_формаhttps://ru.wikipedia.org/wiki/Третья_нормальная_форма
Из примеров, вроде, всё должно быть ясно.
Вопрос: Как создавать качественый код в 3-4-5 раз быстрей?

Лучший ответ:
Наймите 3-4-5 высококачественных программистов. Становитесь менеджером, в общем.

Худший ответ:
Скорость создания именно качественного кода (под этим я подразумеваю сопровождаемый код, который решает актуальную задачу) напрямую зависит от трёх вещей:
1) Понимание задачи
2) Знание предметной области
3) Владение существующей кодовой базой
Остальное (скорость набора, IDE, снипеты и т.д.) уже вопрос удобства. Всё это конечно здорово облегчает жизнь, но далеко не так важно.
Вопрос: Платежный агрегатор для физических лиц посоветуете?

Лучший ответ:
Отвечу вопросом на вопрос: а что, у нас вообще существуют агрегаторы готовые работать с физиками иначе чем по схеме пожертвований?

Худший ответ:
Интеркасса (для Украины в основном платежи), Free-kassa и Piastrix. Работают с физ. лицами.
Вопрос: Box-shadow или как сделать разные тени у одного блока div?

Лучший ответ:
Вариант с box-shadow: inset 0 30px 20px red, inset 0 5px 20px blue;

не канает, ибо тени накладываются 

Худший ответ:
Похоже?
Вопрос: Как автоматически отправить пользователю смс при посещении им конкретной страницы сайта?

Лучший ответ:
Господа, как можно реализовать такой механизм?Нанять программиста. У вас сейчас вполне готовое ТЗ. freelansim.ru в помощь.Самое загадочное для меня место - как при посещении конкретной странички с конкретным адресом высылать смс.встроить в движок сайта описанную Вами выше логику.

Худший ответ:
сам использовал для этого смстрафик (но х.з. что там теперь с тарифами), api довольно простое, задача на полчаса с перекурами
Вопрос: Для чего на сайтах пишут историю развития компании?

Лучший ответ:
Интересна, например, будущим сотрудникам. Многим важно, чтобы компания была с многолетней историей.

Худший ответ:
Надо понять, для кого её писать.
Если будущим сотрудникам, то надо сделать акцент на том, что поможет им влиться в новый коллектив, без скучных и серых тонов. "В 2014 году к нам пришел 50-ый сотрудник и мы закатили рок-вечеринку под песни Рамонс" или "В 2015 году мы получили инвестиции от компании Майрософт за наш продукт "Слово". Мы отметили это событие поездкой по Волге. Особенно отличился Дима, который взял с собой енота" и рядом групповая фотография с вашей командой и енотом. Новому сотруднику в первый же день будет о чем пообщаться с коллегами в перерыве.
Если пишете для партнеров, контрагентов, инвесторов или клиентов, то опишите основные достижения: что сделали, как это сделали и какие результаты вы получили.
Таким образом ваши партнеры увидят, что вы из года в год добиваетесь хороших результатов, а значит сотрудничать с вами можно и нужно.
Вопрос: Правильно ли хранить абсолютно все состояния в Redux?

Лучший ответ:
Правильно ли хранить абсолютно все состояния в Redux?
нет, храните  только то что нужно, для остального есть state, кроме того  очень частое обновление сторы плохо сказывается на производительности

Худший ответ:
Если есть взаимодействие между компонентами — лучше через actions. Тем более, что вы будете видеть все изменения в Redux devTools.
Что касается локальных, типа управляемых форм, то тут надо быть мазохистом чтобы каждое действие через store и редюсеры гонять.
Вопрос: Что выбрать Adobe Muse или MACAW?

Лучший ответ:
Sublime Text / Atom / WebStorm
Muse и ему подобные генерируют какое-то дерьмо вместо разметки.

Худший ответ:
Правильно выбрать HTML/CSS и писать руками
Вопрос: Есть ли в Москве какие-нибудь курсы по языку Erlang?

Лучший ответ:
Имхо, нет и быть не может ввиду малого количество человек использующих его. Есть смысл попытаться устроиться в конторы использующего его. Яндекс там.

Худший ответ:
Если еще актуально, то Erlang Solutions недавно выкатила свой курс erlang-express в свободный доступ для академических кругов (студенты, преподаватели и т.п.)
Вопрос: Как изменить громкость музыки в Vk с помощью js?

Лучший ответ:
getAudioPlayer().setVolume(1)
Значение от 0 до 1. Например, 0.5 будет 50% громкости.
Там же можно и треки попереключать

Худший ответ:
Ну, очевидно движением (сдвигом) ползунка громкости. А как его сдвигать, хз, не интересовался. Можете сами покопаться в коде (через поисковый запрос: "volume" ):VK audio.jsaudioplayer.js
Вопрос: Как запретить отключать монитор при закрытии крышки ноутбука w10?

Лучший ответ:
Выдрать датчик разве что. Монитор обычно отключается аппаратными средствами, никакие настройки не повлияют.

Худший ответ:
https://sprosi.pro/questions/180064/zapretit-vyikl...
Мне помогло запретить отключать дисплей при закрытии крышки
Вопрос: Почему стали популярны less, sass, ruby on rails, bower, grunt? И зачем они нужны?

Лучший ответ:
Почему стали? От лени и нежелания думать своим мозгом.
Популярны они сталит благодаря продвижению Гуглом, Яндексом и иже с ними всяких "стандартов написания кода". При том, что и Яндекс и Гугл в этом плане очень далеки от идеала.
Эти фреймворки хороши для сквозной разработки крупных проектов, когда все участники хорошо знакомы с данными методами, давно сотрудничают и т.п. Т.е. для тех же крупных компаний. При том, что в большинстве крупных компаний всё-таки имеются собственные стандарты.
Ну а остальные уже, как обезьяны, подхватили. И требуют БЭМ, SASS, Angular для статичного одностраничника. Начинаешь выяснять для чего заказчику всё это надо - "а мне так наш дизайнер посоветовал"... Или когда берёшься доделывать чужой проект с кучей недоделанных хвостов в SASS - то ещё удовольствие и "оптимизация написания кода" - тупо вручную текстовым поиском приходится по фалам искать потерявшиеся переменные.
Сама настройка, выработка общих стандартов и синтаксиса для этих фреймворков - занимает кучу времени.
Так что по большому счёту вы ничего не пропустили. Браузеры все равно не понимают SASS и иже с ним))
Пишите как вам удобнее. Если клиент настаивает - попробуйте выяснить причины такой настойчивости. Если случай клинический - шлите лесом!

Худший ответ:
Не парься, эти вещи лишь упрощают и автоматизируют рутину для тех у кого есть мозг. Без них вполне себе можно не спеша работать и делать ВСЕ.
А вот если наоборот, как в моем случае, все эти вещи знаю, а программировать один фиг не могу. Вот тут уже проблема. И less с grunt'ом за меня ничего не напишут.
Вопрос: Как правильно спроектировать Laravel приложение с уклоном в enterprise?

Лучший ответ:
Взять Symfony.
Только вот серьёзно, зачем делать из отвертки дрель, когда она уже есть. Вы думаете, что это будет быстрее? Вы думаете что это будет дешевле?  Laravel прекрасен для своих, средних, задач, для "enterprise" берите Symfony.

Худший ответ:
Используйте Laravel и не беспокойтесь. Он построен на Symfony. Если понадобится, то использование  Doctrine вместо/вместе с Eloquent возможно.
Вы дольше будете изучать Symfony и набирать команду с его поддержкой. Проще использовать его части, а не строить из себя умного сноба, оправдывающего высокую зарплату.
Laravel позволит быстро построить прототип. Изменить какие-то критичные части всё одно придётся. И это не отменит использование частей от Symfony.
Вопрос: FreeBPX: Есть ли возможность тестировать irv с внутренних номеров?

Лучший ответ:
во freepbx есть симуляция входного звонка, номер 7777

Худший ответ:
Использовать модуль Misc Application. В поле Feature Code указываете какой-нибудь номер, при наборе которого будет переходить на указанный Destination.
Вопрос: Что делать первым? Дизайн и интерфейсы или серверную разработку? (backend/API)?

Лучший ответ:
Зависит от обстоятельств. И от того, что приоритетнее - затраты или сроки.
Если у нас есть подробное ТЗ на функционал, по которому работает как бекенд, так и дизайнеры, то разработка может идти одновременно с дизайном. Или есть интеграционные задачи с системами заказчика, по которым можно работать без дизайна вообще - разработке ждать дизайн не нужно. 
Или, если UI команда занимается только разрисовкой стандартных шаблонов - то почти всю разработку можно закончить и без макетов.  Но, если есть этап целеориентированного проектирования, т.е. на старте нет понимания того, какой функционал будет реализован, то стоит подождать прототипов. Хотя даже в этом случае - базовые модели данных редко меняются.
С опытом управления разработкой приходит понимание, что именно может сильно поменяться после отриcовки UI, а что нет. И это "нет" можно запустить в разработку. Ну а ошибки такого понимания рефакторятся - в большинстве случаев это будет все-равно быстрее, хотя и затратнее.
С мобильным приложением как-то так же. Мы знаем базовые модели данных, можем делать АПИ. Но по мере отрисовки экранов приложения - АПИ может меняться, дополняться.

Худший ответ:
Ну обычно начинают с прототипа ( макета ), т.е. с интерфейса, а после оболочку натягивают на бекэнд
Вопрос: Чем/как шифровать ноутбук?

Лучший ответ:
https://veracrypt.codeplex.com/   неплохо

Худший ответ:
поставить linux, диск щашифровать. тогда поможет только паяльник в попе)
Вопрос: Уважаемые путешествующие представители хабрасообщества. Специально для вас хотим сделать сервис “социальной почты”?

Лучший ответ:
Отлично! Класная идея Бро!!! 
Мне надо килограмовый пакет из Колумбии привезти !))

Худший ответ:
Есть сообщество в жж туда-обратно, birdymail.ru и другие.
Вопрос: Как правильно выстроить процесс изучения Web-программирования «с нуля»?

Лучший ответ:
1) Освой html + css, научись верстать Простые странички у себя на компьютере.
2) Освой серверный язык, например php. Организуй простой обмен данными между страничкой и сервером. 
3) Познакомься с mysql. Научись записывать и выводить данные, отправленные со странички.
4) ...
5) Profit
Эта связка была актуальна много лет назад, но она очень проста в освоении. Научись делать те простые вещи, которые я указал в каждом пункте и тогда поймешь что тебе надо учить и в какую сторону копать.

Худший ответ:
Хотелось бы как-то структурировать знания, накопленные за годы работ. 
мне прям интересно стало, что же ты читал годы времени, что щас тут задаешься вопросом изучать все с азов?
или ты безнадежен и веб - не твое. или я даже не знаю...
Вопрос: Можно ли написать программу с GUI без библиотек на Python?

Лучший ответ:
Можно, сначала пишем свою обвязку над графическим API своей ОС, получаем окно и возможность на нем рисовать. Дальше рисуем кнопочки и обрабатываем события руками, почему бы и нет?

Худший ответ:
А собственно зачем? Для интереса? А если для разработки то тогда не знаю почему не PyQt тот же... Возможно, вас убила установка пакетов и вы уже решили без либ делать. Бывает установка либ иногда полностью отбивает желание что либо делать. Особенно когда ты еще новичок... Или возможно ты считаешь что либы использовать не круто... Ну тогда тут хочется сказать лишь одно - "Не изобретай велосипед!"
А если все из-за установки либ, то я могу тебе помочь.
Пиши в вк:Тыц
Вопрос: Заботятся ли на вашем рабочем месте о здоровье сотрудников?

Лучший ответ:
Кактус поставил рядом.

Худший ответ:
Электрика исправна, аптечка есть.
Можно выбрать ДМС или фитнес бесплатно.

Сам для себя давно в фитнес записался.
Вопрос: Чем создать мобильное приложение, если никогда этого не делал?

Лучший ответ:
сайт это веб-приложение которое через phonegap можно скомпилировать в моб-приложение
- для тебя это лучший путь

Худший ответ:
Сервис создания сайтов UMI.RU позволит просто и бесплатно сделать сайт, который одинаково хорошо будет смотреться и на любой мобильной платформе и на большом экране. Верстка сама будет адаптироваться к размеру экрана устройства. В него гораздо проще будет вносить изменения и нет необходимости ставить специальное приложение на телефон. Там все просто.  Результат понравится. Дизайн сайта выбирайте из "адаптивых" шаблонов.
Вопрос: Как получить значение из результата запроса в 1С?

Лучший ответ:
И запрос поправьте.Функция ПолучитьЦены(Контрагент, Товар)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
    	|	ЦеныКонтрагента.Цена КАК Цена
    	|ИЗ
    	|	Справочник.Контрагенты.Цены КАК ЦеныКонтрагента
        |ГДЕ
    	|	ЦеныКонтрагента.Ссылка = &Контрагент
    	|	И ЦеныКонтрагента.Товар = &Товар";
  Запрос.УстановитьПараметр("Контрагент", Контрагент);
  Запрос.УстановитьПараметр("Товар", Товар);
  Результат = Запрос.Выполнить().Выбрать().Следующий(); 	
  Возврат Результат.Цена;
КонецФункции

Худший ответ:
Вы получаете таблицу (пусть даже состоящую из одной строки).
Вам нужно не просто результаты запроса читать, а или обходить все строки таблицы в цикле или прямо обращаться к первой строчке таблицы.
Вопрос: Как передать данные формы без перехода на страницу выполнения скрипта?

Лучший ответ:
Есть несколько вариантов решения проблемы:Отправлять AJAX запрос на report.phpНа стороне report.php сделать редирект на нужную страницу (анпример на ту, с которой был отправлен запрос)

Худший ответ:
Кроме, собственно, AJAX, заодно погуглите о pjax, там тоже можно делать запросы формы без полной перезагрузки страницы.
Вопрос: Почему так происходит?

Лучший ответ:
1. var - задаёт область видимости переменной, если вы перед строкой tempScrollTop = currentScrollTop; укажите var, то при следующем вызове функции в переменной не сохраняется предыдущего значения. 
2. Потому что tempScrollTop нужно запоминать в конце, что бы при следующем вызове функции по событию сравнивать с предыдущим значением, а не с текущим. 
3. Во втором варианте переменная инициализируется значением равным 0

Худший ответ:
1. var - задаёт область видимости переменной, если вы перед строкой tempScrollTop = currentScrollTop; укажите var, то при следующем вызове функции в переменной не сохраняется предыдущего значения. 
2. Потому что tempScrollTop нужно запоминать в конце, что бы при следующем вызове функции по событию сравнивать с предыдущим значением, а не с текущим. 
3. Во втором варианте переменная инициализируется значением равным 0