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,你不能在赋值之前使用它。constlet 变量声明会被提升,但它们不会被初始化。换句话说,虽然变量声明会被提升到作用域的顶部,但赋值操作会保留在它的原始位置。因此,如果你在变量赋值之前访问该函数,JavaScript 会抛出 ReferenceError,因为变量被提升了,但值还没有赋给它。


解决方法:
使用function声明方法,这种会被提升,并且可以在声明之前调用
 

百度了原因使用function声明不会抛出异常是因为:

function 声明会被整体提升并立即初始化,这意味着它在代码的任何位置都可以使用。而 constlet 声明的变量只能在初始化之后才能使用。如果你试图在初始化之前使用它们,JavaScript 会抛出 ReferenceError

最后代码改成这样就行

function openInit(){
  xxxx
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值