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