【控制台】报错:Cannot access ‘xxx‘ before initialization

这篇具有很好参考价值的文章主要介绍了【控制台】报错:Cannot access ‘xxx‘ before initialization。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

报错信息

  • 示例:
    【控制台】报错: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声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。文章来源地址https://www.toymoban.com/news/detail-504873.html

  • 错误原因:
1. 在块作用域内,letconst 声明的变量被提升,但变量只是创建被提升,初始化并没有被提升。
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的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包