解构函数参数中的默认值导致ReferenceError

问题描述 投票:0回答:1

为了测试目的,我需要在我的CRUD函数中为db设置默认值,并且遇到了奇怪的行为,我还无法弄清楚。考虑以下代码:

import { db } from './firebase'

function getUsers({ db = db }) {
  try {
    return db
    ...

现在,当我在测试中使用该函数时,就没有问题,因为我通过一个测试数据库在测试文件中调用了该函数。但是真正的应用程序应该能够使用默认值,并且可以在没有任何参数的情况下调用该函数。但是在这里,我遇到了错误:ReferenceError: can't access lexical declaration 'db' before initialization。我不知道为什么会这样。

我通过重命名参数找到了解决方法。但是,我仍然很想知道这里发生了什么。有人有主意吗?

Workarond:

import * as firebase from './firebase'

function getUsers({ db = firebase.db }) {
  try {
    return db
javascript firebase testing default-value destructuring
1个回答
0
投票

这就是作用域在函数声明参数列表中的工作方式。默认参数值上下文includes的范围是参数列表本身(嗯,已经声明的参数)。因此,db参数从导入中遮盖了相对全局的符号。

您也可以通过更改参数名称来解决此问题:

function getUsers({database = db})
© www.soinside.com 2019 - 2024. All rights reserved.