首页 > 解决方案 > 未为模块库定义变量

问题描述

我一直在重构我的 App.js 文件并将一些函数提取到一个名为 utility.js 的文件中。每个函数都有一个导出,我的 App.js 有必要的导入。但是,我收到了'myVariable' is not defined有关 utility.js 文件的一些错误。我认为这是因为我在 App.js 文件中的 App() 函数之外声明了变量,因此如果您单独查看 utility.js 文件,则尚未声明变量。这个 pieceTable 变量也用于 App.js 中的其他函数。

你如何处理这种情况?

例子:

实用程序.js 文件

export const findPieces = piece => {
pieceTable = [];
// blah blah
}

应用程序.js 文件

import {findPieces} from './utilities'

let pieceTable=[];

function App() {
const findDraught = findPieces('King')
}

对于这种类型的场景,我收到“编译失败”错误,说实用程序.js 中未定义“pieceTable”

标签: javascriptreactjs

解决方案


如果你真的想要一个全局

当您说let pieceTable=[];您正在显式地创建pieceTable一个范围为模块本地的变量时,即不是全局变量。

如果您刚刚提到,pieceTable您将向顶级范围对象分配一个属性window(在浏览器 JavaScript 上下文中)。您可以使用以下命令明确引用它:window.pieceTable

(仅供参考,在 node.js 中它会是global.pieceTable阅读原因。)

全局变量已过时,我不建议在您的情况下使用全局变量。

如果您不想要全局,但仍想要模块化设计

选择一个拥有的模块pieceTable并让该模块导出它。然后让所有其他需要引用它的模块pieceTable 导入它。这是利用模块机制而不是全局机制。

如果你想要纯粹的设计

设计您的函数,以便将它们的值pieceTable(或pieceTable作为属性的对象)作为参数传递给函数,而不是依赖于获取单例或全局。这也将使您的函数更易于测试,并消除令人困惑的全局副作用。


推荐阅读