我又仔细回顾了一下 snabbdom 的源码,它在确定了 sameVnode 之后,确实又去执行了 patchVnode ,继续去深入对比了。这一点和我们讲的原则不太一样。我理解,这是因为它在 sameVnode 比较时,没有限制 key 是 undefined 。这样的话,新旧两个 vnode tag 一样,但都没有 key(即 key 都是 undefined),不能直接放弃,还是要进行比较的,这是 snabbdom 这个库实现的细节。但我们在理解 diff 算法的时候,还是建议按照那三个原则去理解,这样才能保证 diff 算法的计算效率。具体实现的时候,可能会根据不同的情况,做出不同的实现方案,这个也很正常。