javascript - 未为模块库定义变量
问题描述
我一直在重构我的 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”
解决方案
如果你真的想要一个全局
当您说let pieceTable=[];
您正在显式地创建pieceTable
一个范围为模块本地的变量时,即不是全局变量。
如果您刚刚提到,pieceTable
您将向顶级范围对象分配一个属性window
(在浏览器 JavaScript 上下文中)。您可以使用以下命令明确引用它:window.pieceTable
。
(仅供参考,在 node.js 中它会是global.pieceTable
。阅读原因。)
全局变量已过时,我不建议在您的情况下使用全局变量。
如果您不想要全局,但仍想要模块化设计
选择一个拥有的模块pieceTable
并让该模块导出它。然后让所有其他需要引用它的模块pieceTable
导入它。这是利用模块机制而不是全局机制。
如果你想要纯粹的设计
设计您的函数,以便将它们的值pieceTable
(或pieceTable
作为属性的对象)作为参数传递给函数,而不是依赖于获取单例或全局。这也将使您的函数更易于测试,并消除令人困惑的全局副作用。
推荐阅读
- c - 如何从 libcouchbase 编译示例代码
- python-3.x - 谷歌云功能在流数据到大查询时达到 10MB 速率限制,而不管使用块?
- php - PHP pdo 仅在查询被硬编码时获得结果
- angular - 动画时垫步内容消失 - mat-horizontal-stepper
- mapbox - Mapbox - 如何在 Mapbox 中添加 .pbf 文件作为图层?
- html - Woo Commerce Checkout Paypal 的东西似乎不起作用
- c# - 如何获取列表c#的所有项目
- c - 如何在C中存储一行的最后一个总和
- git - git rebase 重新散列未触及的提交
- python - 如何将两个列表连接在一起但频率不同