javascript - d3js tick 函数定义

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

相关文章:

JavaScript 变量赋值

javascript - 这里的加号有什么用?

javascript - D3 转换未按预期工作

javascript - d3.js 使用不同的数据创建相同的 svg 对象

javascript - 将 jquery ajax POST 请求更改为获取 api POST

javascript - 从发布的 JavaScript 中删除 console.log 和其他调试代码的最佳实践?

javascript - 使用javascript从XML字符串中获取节点值

javascript - Aurelia 的 View 模型类中是否有任何析构函数?

javascript - d3力图: sticky nodes

javascript - 如何将 svg 元素 ID 与 json 键匹配