Как вы сказали, узел является асинхронным, и журнал «Test ...» выполняется до получения ответа от базы данных. Функция, которую вы передали в запросе, выполняется после получения ответа из базы данных.
По умолчанию переменные в js являются глобальными, поэтому, если вы напишите что-то вроде:
let i = 30
в вашей функции, она будет локальной
Представьте, что вы - движок JavaScript, читающий этот код сверху вниз:
numPrinter
. ()
нет, поэтому numPrinter
только определяется, но не вызывается. console.log(i);
. Вызов этого здесь приводит к ReferenceError: i is not defined
, потому что numPrinter
все еще НЕ был вызван, поэтому к i
еще нельзя получить доступ. numPrinter();
. Здесь JS-движок считывает ()
и вызывает функцию numPrinter
. Теперь у нас есть доступ к i
, потому что необъявленные переменные всегда становятся глобальными переменными. console.log(i);
считывается и печатает результат 30
, потому что i
доступен глобально вне функции numPrinter
.