SPA подразумевает перенос логики на клиент. И именно для реализации этой логики и нужны фреймворки. А то, что для общения с сервером вы используете AJAX - это дело десятое.
Именно так. И вот этот result не содержит никакого alert, а только return x;. Так программирование работает, я не знаю, честно говоря, что тут ещё можно добавить ¯\_(ツ)_/¯
Ну вот так же. let result = slow(x); - это совершенно не то же самое, что let result = slow;.
Вы понимаете разницу между этими двумя вариантами? Вы пишете про второй, но он бессмысленен с точки зрения кеширования, потому что не исполняет slow вообще, только записывает её тело в кеш. Первый вариант исполняет функцию и кеширует возвращаемое значение, а не все сайд-эффекты, которые функция производит.
А запоминать ничего не нужно. В реальной жизни вы с этим третим аргументом JSON.stringify встретитесь ровно 0 раз. Это учебный пример, который нужен чтобы вас научить читать, понимать и писать код, а не заучивать заклинания.
Логика здесь есть и она очень чёткая и понятная - достаточно просто перестать относиться к коду как к магии и понять, что вы делаете и зачем. В частности в документации, на которую я вам уже давал ссылку, ясно написано: "[The replacer parameter] should return the value that should be added to the JSON string". И вот уже появилась логика - мы возвращаем то, что должно попасть в итоговый JSON. Собственно, в этом весь смысл этой функции.