Так работает область видимости в списках параметров объявления функции. Область контекста значения аргумента по умолчанию включает сам список параметров (ну, те, которые уже объявлены). Таким образом, параметр db
скрывает относительно глобальный символ из импорта.
Вы также можете обойти проблему, изменив имя параметра:
function getUsers({database = db})
Область действия работает таким образом, что возможно использовать параметры ранее в списке параметров в выражениях для параметров позже в списке:
function something(a, b = a + 1)
Вызов такой функции, как something(0)
, установит b
в 1.
О, и перечитывание вашего вопроса, инициализация параметра для себя не работает, потому что, ну, это не имеет смысла; если параметр отсутствует в вызове функции, то это undefined
, поэтому значение по умолчанию, равное undefined
, явно неверно.