1 - Копирование функции
В JS как и в других языках нет оператора копирования есть оператор присваивания. т.е. никакого копирования происходить не может. Обычно происходит присваивание переменной результата выражения стоящего справа. оператор function всегда создает новую функцию и возвращает ссылку на нее.
2 - "базовой переменной"
в языке нет такого типа данных как "базовая переменная".
3 - Я имел ввиду Java, C#, ... двух такого нет.
Забавно я всегда думал что библиотеки в этих языках на 99.999% состоят из ссылочных типов
google
Очень важно различать сам объект и ссылку на объект.
Присваивание для сложных типов всегда копирует ссылку на объект.
Присваивание для примитивных типов создает новый объект и копирует значение полученное по ссылке.
Более наглядно это можно посмотреть в отладчике браузера. например в хроме клавиша F12->вкладка Memory-> и кнопка получить снапшот
и ты увидишь все объекты используемые на странице. те же функции числа и даже булевы значения.
Для доступа к этим данным в JavaScript используются высокоуровневая абстракция в виде двух древовидных структур(глобальная область видимости и текущий scope) которые позволяют манипулировать данными через имена переменных.Наглядно увидеть ссылки на данные можно набрав в console.log(window) в консоли.
К теме вопроса "Какой резон передавать функции в другое место?"
Функция становится такой же переменной как число строка или объект.
подробнее
Пример в учебнике пытается наглядно показать что "ссылка на функцию" и "сама функция" это разные понятия и ссылкой на функцию можно манипулировать как переменной (принимать передавать изменять).
Простой пример где используется присвоение функций переменным это обработчики событий.
Это позволяет создавать и изменять объекты на лету в момент исполнения программы.