我遇到了一个我似乎无法理解的问题,为什么要定义这样的tick函数;
function tick () { /* do something */ }
它在这种模式下工作正常
var tick = function () { /* do something */ }
不起作用。问题在哪里?
的工作示例 的工作示例答案 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() ...
之间的区别。