我正在研究 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;
关于javascript - 两个矫揉造作和一个 if 条件测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931798/