当我观看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/

10-12 03:56