首页 > 解决方案 > 如何使用 Parcel Bundler 在函数内设置全局变量?

问题描述

var myNum = 32;

function randomizer(limit) {
    let myNum = Math.floor(Math.random() * limit);

    console.log("myNum is " + myNum);
    console.log("Global myNum is " + window.myNum);
    if (window.myNum == undefined) {
        console.log("Can't access global object when using parcel bundler");
    }

    return myNum;
}

我收到一条控制台消息,说Global myNum is undefined 在我的package.json文件中我有脚本行:

"scripts": {
    "dev": "parcel src/index.html",
    "build": "parcel build src/index.html"
  }

在我正在使用的命令行npm run dev

标签: javascriptglobalparceljs

解决方案


这似乎是Parcel 中的一个错误

更新 (12/2021):此错误现已在包裹版本2.0.0-nightly.939及更高版本中修复。它应该在 parcel 之后的下一个稳定版本中发布2.0.1

根本原因非常具体,因此您现在可能可以解决它。仅当您隐藏全局变量时才会发生这种情况-例如,您拥有var myNum = 32,然后在函数范围内重新声明具有相同名称的 a 变量(例如let myNum = <anything else>)。所以如果你可以重构你的代码来避免阴影,你就可以避免这个问题。


推荐阅读