javascript - 为什么这个片段不纯?
问题描述
当我看谷歌浏览器开发者时, https://youtu.be/qaGjS7-qWzg?t=636
他们说这个片段不纯。我不知道为什么。
const g = new Map();
for (const [u,v] of edges) {
if (!g.has(u))
g.set(u, []);
if (!g.has(v))
g.set(v, []);
g.get(u).push(v)
}
他们还提到这是纯粹的,
const startPoints = new Set(edges.map(([u, v]) => u));
const g = new Map(
[...startPoints].map(startPoint =>
edges.filter(([u, v]) => u == startPoint).map(([u, v]) => v)
)
);
解决方案
当我们谈论系统中的纯度时,我们谈论的是不会改变可观察状态的系统。
- 在第 1 行的第一个脚本中
g
是空Map
的,到最后一行则不是。它的价值发生了变异。 - 在第二个脚本
startPoints
中,第一行和最后的内容相同。
为了简单一点,让我用一个函数来解释一下。假设你有一个函数,它给出一个数字数组,它将它乘以 2。所以如果:
var a = [1,2,3];
multiply(a)
// a = [2, 4, 6]
这个函数不是纯粹的。在这种情况下,它改变了系统的可观察状态a
。但如果:
var a = [1,2,3];
var b = multiply(a)
// a = [1, 2, 3]
// b = [2, 4, 6]
这个函数是纯的。a
没有改变。
推荐阅读
- jquery - Jquery UI Datepicker可以以与最初保存日期格式不同的格式显示日期吗?
- excel - Excel Vlookup 表数组抛出 NA 错误
- c - sprintf原始字节到C中的字符串?
- cmake - 在 Windows 上将 SDL2、SDL2_image 与 Cmake CLion 一起使用时出错
- joomla - 如何在带有 AJAX 的 API 的 joomla 中获取表单的“编辑器”字段?
- javascript - 清理后 Gulp 不复制文件
- python - Ansible 使用解析的字符串和循环更新 Dict Var
- ios - Swift - 在 ScrollView 中自动约束项目
- c# - 在 MVC 的标签中显示正确的用户名
- sql-server - 远程访问 SSIS SQL Server 集成服务时访问被拒绝