我正在研究Mike Bokstok(d3js)高度优化的voronoi实现代码。

我不了解当前的测试:

if (!(m = (halfedges = cell.halfedges).length)) return;


在此处查看代码:https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L87


halfedges和m是定义在行后的变量!如何运作?
测试的目的是什么?如果有人使用错误类型的单元格(没有类型数组的Halfedges属性)调用该函数,是否可以进行防御测试?

最佳答案

由于var hoistingvar可以放在函数中的任何位置,但将首先在其作用域中进行处理:

bla = 2;
var bla;

// is implicitly understood as:
var bla;
bla = 2;


请注意,它使用的是=,而不是==。这不是对mhalfedges的测试,它是两个影响,也是对cell.halfedges.length的测试。

可以改写成

if (!cell.halfedges.length) return;
halfedges = cell.halfedges;
m = halfedges.length;

10-08 12:41