Amonecks, все дело в области видимости JS... Такого я не встречал в других ЯП.
Даже само определение ОВ настолько лаконично что не всем дается с первого раза.
Точкой отсчета является объявление функции. Именно относительно объявления и определяются "видимые" ей переменные.
Вот иллюстрация этого
const a = 1
test(function(){alert(a)})
function test(f) {
const a = 2
f()
}
На момент объявления
function(){alert(a)}
Доступно лишь
const a = 1
Именно с этим значением и будет работать функция, когда ее получат как параметр в другой функции и вызовут на исполнение.