Javascript 未捕获引用错误:无法访问';股票';初始化前

Javascript 未捕获引用错误:无法访问';股票';初始化前,javascript,module,Javascript,Module,我试图将一个对象导入到另一个JS文件中,我一直遇到这个错误,uncaughtReferenceError:在初始化之前无法访问'stocks'。我申报了股票,并且正确地导入了股票,所以我看不出我做错了什么。非常感谢您的帮助。谢谢 在股票文件中: export const stocks = { megaCorp: { name: 'Mega Corporation', value: decideStockValue(), portIn: 0,

我试图将一个对象导入到另一个JS文件中,我一直遇到这个错误,uncaughtReferenceError:在初始化之前无法访问'stocks'。我申报了股票,并且正确地导入了股票,所以我看不出我做错了什么。非常感谢您的帮助。谢谢

在股票文件中:

export const stocks = {
    megaCorp: {
        name: 'Mega Corporation',
        value: decideStockValue(),
        portIn: 0,
        document: "mega"
    },

    lunaBake: {
        name: "Luna Baking",
        value: decideStockValue(),
        portIn: 1,
        document: "luna"
    },
}
在用户文件中:

import { stocks } from "./stocks.js";

export let user = {
    money: 2000,
    portfolio: [0, 0, 0, 0]
}

function getValue () {
    let value = user.money;
    let cannon = stocks.cannonRock.value * user.portfolio[0];
    let alpha = stocks.alphaComp.value * user.portfolio[1];
    let luna = stocks.lunaBake.value * user.portfolio[2];
    let mega = stocks.megaCorp.value * user.portfolio[3];
    value += cannon;
    value += alpha;
    value += luna;
    value += mega;
    return value;   
}

user.value = getValue();

再次看看代码,它在语法上似乎很好,所以这不是一个答案,但我更想分享一段代码,看看它的行为

您共享的错误
Uncaught ReferenceError:Cannot access'variable_name'before initialization
是在词法变量在初始化之前被访问时引发的(称为暂时死区错误),但是在您共享的代码中没有任何东西会引发此错误

例如,此代码将抛出此错误

const x = 3
function a(){
    console.log(x)
    const x = 5;
}
a()
假设错误确实源于用户文件,那么下面的代码可能会解决它。在代码中,u had getValue是一个应该被提升的函数表达式(这也应该是好的),但可能是您使用的绑定器行为不正常

import { stocks } from "./stocks.js";

const getValue = (stocks, money, portfolio) => {
  let value = money;
  let cannon = stocks.cannonRock.value * portfolio[0];
  let alpha = stocks.alphaComp.value * portfolio[1];
  let luna = stocks.lunaBake.value * portfolio[2];
  let mega = stocks.megaCorp.value * portfolio[3];
  value += cannon;
  value += alpha;
  value += luna;
  value += mega;
  return value;
};

const money = 2000;
const portfolio = [0, 0, 0, 0];
export const user = {
  money,
  portfolio,
  value: getValue(stocks, money, portfolio),
};



调试了一段时间后,我关闭了服务器并再次打开它。这一次,效果很好。我仍然不确定最初的错误为什么会发生,但现在它工作得很好。谢谢大家的帮助

这是某种依赖性(c)Sergei Vohmianin循环过载的经典例子


你能做的最简单的事情就是将该对象移动到它的单独模块中,只需省略像app=>method=>app这样的循环。

你共享的代码在语法上是好的,你可能不仅仅是因为代码u sharedI注释掉了user.js中所有有“stocks”调用的行,很有趣,你在哪里运行代码?比如Chrome浏览器上的LocalHost服务器是什么环境