我正在研究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 hoisting,var
可以放在函数中的任何位置,但将首先在其作用域中进行处理:
bla = 2;
var bla;
// is implicitly understood as:
var bla;
bla = 2;
请注意,它使用的是
=
,而不是==
。这不是对m
和halfedges
的测试,它是两个影响,也是对cell.halfedges.length
的测试。可以改写成
if (!cell.halfedges.length) return;
halfedges = cell.halfedges;
m = halfedges.length;