控制台报错:Cannot access 'xxx' before initialization解决方法

 更新时间:2023年11月06日 11:09:01   作者:一颗不甘坠落的流星  
这篇文章主要给大家介绍了关于控制台报错:Cannot access 'xxx' before initialization的解决方法,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下

报错信息

示例:

示例代码:

// constants.js 文件:
export const ATTRIBUTION_FORM = {
  partition_type: '',
  data_resource_id: '',
  query_dates: [
    {
      date_dim: null,
      date_type: 'day',
      date_range: 1,
    },
  ],
  filters: [
    {
      logic: 'and',
      wheres: [],
    },
  ],
};
// create-crowd.js 文件:
import { ATTRIBUTION_FORM } from '@/commons/constants';
console.log(ATTRIBUTION_FORM)	// 报错

解决方法

ES6:当程序的控制流程在新的作用域(module function 或 block作用域)进行实例化时,在此作用域中用let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。

错误原因:

1. 在块作用域内,let 和 const 声明的变量被提升,但变量只是创建被提升,初始化并没有被提升。
2. 在初始化之前使用变量,就会形成一个暂时性死区。
3. 即 let/const 声明的变量在未出现声明变量的那一行代码之前没有进行词法绑定,无法被访问。

方法背景:

1. 我们知道,let/const作用域为块级作用域,变量不会提升;
2. 而var的作用域为全局作用域,可以进行变量提升,这也就是为什么var没有暂时性死区。

于是这里就可以使用 var 替代 const 去解决这个报错,作为一种临时方案。

// constants.js 文件:
export var ATTRIBUTION_FORM = {
  partition_type: '',
  data_resource_id: '',
  query_dates: [
    {
      date_dim: null,
      date_type: 'day',
      date_range: 1,
    },
  ],
  filters: [
    {
      logic: 'and',
      wheres: [],
    },
  ],
};

总结

到此这篇关于控制台报错:Cannot access 'xxx' before initialization解决方法的文章就介绍到这了,更多相关控制台报错Cannot access xxx before initialization内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解JavaScript Promise和Async/Await

    详解JavaScript Promise和Async/Await

    这篇文章主要介绍了JavaScript Promise和Async/Await,对异步编程感兴趣的同学,可以参考下
    2021-04-04
  • 8种现代JavaScript响应式模式小结

    8种现代JavaScript响应式模式小结

    响应式的本质是关于系统如何对数据变化做出反应,并且存在不同类型的响应式,本文就来介绍8种现代JavaScript响应式模式小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 深入理解JavaScript程序中内存泄漏

    深入理解JavaScript程序中内存泄漏

    这篇文章主要帮助大家深入理解JavaScript程序中内存泄漏问题,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • JavaScript中使用Object.create()创建对象介绍

    JavaScript中使用Object.create()创建对象介绍

    这篇文章主要介绍了JavaScript中使用Object.create()创建对象介绍,本文先是讲解了语法,然后给出了创建实例,需要的朋友可以参考下
    2014-12-12
  • javascript面向对象三大特征之多态实例详解

    javascript面向对象三大特征之多态实例详解

    这篇文章主要介绍了javascript面向对象三大特征之多态,结合实例形式详细分析了javascript面向对象程序设计中多态的概念、原理,并结合实例形式总结了多态的实现方法与使用技巧,需要的朋友可以参考下
    2019-07-07
  • js+html5实现手机九宫格密码解锁功能

    js+html5实现手机九宫格密码解锁功能

    这篇文章主要为大家详细介绍了js+html5实现手机九宫格密码解锁功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 开源的javascript项目Kissy介绍

    开源的javascript项目Kissy介绍

    本文向大家介绍了开源的javascript项目Kissy,是taobao UED小组推的一款js框架,我们来简单研究下,为什么taobao这么推崇他呢。
    2014-11-11
  • js中的深浅拷贝问题简析

    js中的深浅拷贝问题简析

    这篇文章主要给大家介绍了关于js中的深浅拷贝问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 分享19个JavaScript 有用的简写写法

    分享19个JavaScript 有用的简写写法

    最近很火的一篇来自国外的文章,js的简写写法一定程度上可以提高你的js书写水平对于js的理解也会更近一步
    2017-07-07
  • js 调用本地exe的例子(支持IE内核的浏览器)

    js 调用本地exe的例子(支持IE内核的浏览器)

    js 调用本地exe程序.我实验了一下 : 使用IE内核的浏览器 都支持 火狐好像不行,感兴趣的碰可以研究下
    2012-12-12

最新评论