javascript - 我应该避免在模块中使用顶级变量吗?
问题描述
我正在使用 React 编写代码,并且正在尝试将一些逻辑移动到模块中,但我很困惑。
我一直在编写如下几行的模块。
// fooModule.js
let count = 0
export function countUp() {
count += 1
}
export function getCount() {
return count
}
无法按预期从外部模块访问此计数变量。
但是,我注意到此变量状态保持不变,当我两次导入此模块时,变量状态已在两者中共享。
那么,我应该改为关注吗?
// fooModule.js
export function countUp(count) {
return count + 1
}
// someClass.js
import { countUp } from './fooModule.js'
const count = 0
const newCount = countUp(count)
谢谢。
补充:感谢您在短时间内的许多回复!我修复了错误的示例代码。
解决方案
您的第二个代码将不起作用,因为count
不在范围内fooModule
,因为您在someClass
. 如果您希望 的每个导入fooModule
器对 具有单独的绑定count
,则一种选择是导出一个函数,该函数在调用时创建一个count
变量,并返回一个函数,该函数将其递增并返回新计数:
// fooModule.js
export function makeCount() {
let count = 0;
return () => {
count++;
return count;
};
}
// someClass.js
import { makeCount } from './fooModule.js';
const counter = makeCount();
console.log(counter()); // 1
console.log(counter()); // 2
或者,使用生成器:
// fooModule.js
function* makeCount() {
let count = 0;
while (true) {
count++;
yield count;
}
}
// someClass.js
const counter = makeCount();
console.log(counter.next().value); // 1
console.log(counter.next().value); // 2
(您也可以在上面的两个代码中使用return ++count
而不是count++; return count;
,但这有点难以阅读 IMO)
推荐阅读
- python - int64 数组和 int 的总和是否应该通过 int64 类型检查?
- c# - 使用非托管内存时出现奇怪的内存使用情况
- python - PYTEST - 如何使 CONFTEST.PY 在其他 python 目录中可用
- jmeter - 无法在另一个请求中使用 Beanshell 预处理器变量
- php - 表格数据输入未按预期工作。它只是在数据库中保存一条记录
- apache-spark - 配置了 ssl 的 elastic4s 弹性搜索不起作用
- oracle - 当我执行存储过程中存在动态PLSQL的存储过程时,由于变量而出现错误
- apache-spark - 如何从 pyspark 数据框中选择特定列(包含特殊字符)的列表?
- sql - 如果我无法在sql中插入表,如何解决主键问题?
- google-sheets - 连续工作表中相同单元格的总和