2013-07-18 86 views
1

我遇到了一个我似乎无法理解的问题,为什么要这样定义滴答函数呢?d3js滴答函数定义

function tick() { /* do something */ } 

它工作正常,并在此模式下

var tick = function() { /* do something */ } 

不起作用。哪里有问题?第一http://jsbin.com/omokap/10/edit

工作示例的第二http://jsbin.com/isobul/1/edit

+0

你拼错“功能”大概:) –

+0

有一个错字。 'fucntion'应该是'function'。如果这不是问题,那么您正试图在定义之前使用该函数。但要正确地帮助您,您必须发布代码的相关部分。 –

+0

@GintasK'fucntion'是一个打字错误:D @FelixKling,我已经添加了2个示例,请检查是否添加了d3js库,因为我遇到了IPS问题 – Scorpy86

回答

2

问题

工作的例子是,你是在一种情况下和在其他情况下的定义后使用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() ...更好的区别,当你考虑下面的例子

的差异更为明显。