1

我遇到了一个我似乎无法理解的问题,为什么要这样定义刻度函数;

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

它工作正常,在这种模式下

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

不起作用。问题出在哪里?

第一个http://jsbin.com/omokap/10/edit的工作示例

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

4

1 回答 1

2

问题是您tick在一种情况下在其定义之前使用,而在另一种情况下在其定义之后使用。

在第一种情况下:

force.on("tick", tick);

function tick () { /* ... */ }

该函数tick是在解析时定义的,可以作为第二个参数传递。

另一方面在:

force.on("tick", tick);

var tick = function () { /* ... */ };

该变量tick是在解析时定义的(因此 JSHint 不会抱怨),但它仅在运行时获取其值。它的值是undefined什么时候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

请参阅此问题var tick = function () ...以了解使用 the和function tick() ...better之间的区别。

于 2013-07-18T15:46:28.173 回答