<分区>
我遇到了一个我似乎无法理解的问题,为什么要这样定义 tick 函数;
function tick () { /* do something */ }
在这种模式下工作正常
var tick = function () { /* do something */ }
没用。问题出在哪里?
第一个工作示例 http://jsbin.com/omokap/10/edit
第二个工作示例 http://jsbin.com/isobul/1/edit
标签 javascript d3.js
<分区>
我遇到了一个我似乎无法理解的问题,为什么要这样定义 tick 函数;
function tick () { /* do something */ }
在这种模式下工作正常
var tick = function () { /* do something */ }
没用。问题出在哪里?
第一个工作示例 http://jsbin.com/omokap/10/edit
第二个工作示例 http://jsbin.com/isobul/1/edit
最佳答案
问题是您在一种情况下在其定义之前使用 tick
而在另一种情况下在其定义之后使用。
第一种情况:
force.on("tick", tick);
function tick () { /* ... */ }
函数 tick
是在解析时定义的,可以作为第二个参数传递。
另一方面:
force.on("tick", tick);
var tick = function () { /* ... */ };
变量 tick
是在解析时定义的(所以 JSHint 不会提示),但它只在运行时获取它的值。当执行force.on("tick", tick)
时,它的值为undefined
。
当您考虑以下示例时,差异会更加明显:
var f;
if (true) {
f = function () { return 1; };
} else {
f = function () { return 2; };
}
f(); // returns 1
对比:
if (true) {
function f () { return 1; }
} else {
function f () { return 2; }
}
f(); // returns 2, from the latest definition
参见 this question更好地理解使用 var tick = function () ...
和 function tick() ...
之间的区别。
关于javascript - d3js tick 函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17718897/