为了测试目的,我需要在我的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
这就是作用域在函数声明参数列表中的工作方式。默认参数值上下文includes的范围是参数列表本身(嗯,已经声明的参数)。因此,db
参数从导入中遮盖了相对全局的符号。
您也可以通过更改参数名称来解决此问题:
function getUsers({database = db})