Функции JS сами по себе являются полноправными значениями; их можно присваивать и передавать точно так же, как числа или строки. Но так как эти функции содержат переменные и обращаются к ним, они поддерживают свою исходную область видимости независимо от того, в какой точке программы эти функции будут выполняться в конечном итоге. Эта концепция называется замыканием.