当我观看Google Chrome开发者时,
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
不变。关于javascript - 为什么此片段不纯?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60128208/