VUE3报错 ReferenceError: Cannot access ‘openInit‘ before initialization
问题描述:
组件展示数据,调用openInit方法,提示ReferenceError: Cannot access 'openInit' before initialization
watch([() => props.baseDetail, () => props.activeName], // 监听这两个数据([newBaseDetail, newActiveName], [oldBaseDetail, oldActiveName]) => {// 判断两个条件if (JSON.stringify(newBaseDetail) !== '{}' && newActiveName === 'basicOneView') {openInit()}},{ deep: true, immediate: true }
)const openInit = () => {xxxxxx
}
百度后得知:const 或 let 声明的函数变量需要等到声明的位置才会被初始化。在这个初始化之前,变量的值是 undefined,但因为它是常量 const,你不能在赋值之前使用它。const
和 let
变量声明会被提升,但它们不会被初始化。换句话说,虽然变量声明会被提升到作用域的顶部,但赋值操作会保留在它的原始位置。因此,如果你在变量赋值之前访问该函数,JavaScript 会抛出 ReferenceError
,因为变量被提升了,但值还没有赋给它。
解决方法:
使用function声明方法,这种会被提升,并且可以在声明之前调用
百度了原因使用function声明不会抛出异常是因为:
function
声明会被整体提升并立即初始化,这意味着它在代码的任何位置都可以使用。而 const
和 let
声明的变量只能在初始化之后才能使用。如果你试图在初始化之前使用它们,JavaScript 会抛出 ReferenceError
。
最后代码改成这样就行
function openInit(){xxxx
}