d3js tick函数定义

时间:2013-07-18 08:55:38

标签: 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

的工作示例

1 个答案:

答案 0 :(得分:2)

问题在于,在一个案例中定义之前使用tick,在另一个案例中定义之后使用force.on("tick", tick); function tick () { /* ... */ }

在第一种情况下:

tick

函数force.on("tick", tick); var tick = function () { /* ... */ }; 在解析时定义,可以作为第二个参数传递。

另一方面:

tick

变量undefined是在解析时定义的(因此JSHint不会抱怨),但它仅在运行时获取其值。 <{1}}执行时,其值为force.on("tick", tick)

当您考虑以下示例时,差异会更明显:

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() ...之间的区别。