2016-01-22 19 views
0

我是新来的JavaScript和AngularJS,以及网络的发展,而我正在经历的Angular docs on directives,我碰到这段代码传来:在javascript中将函数放入其他空函数的目的是什么?

// start the UI update process; save the timeoutId for canceling 
timeoutId = $interval(function() { 
    updateTime(); // update DOM 
}, 1000); 

为什么不能这只是这样写方式:

// start the UI update process; save the timeoutId for canceling 
timeoutId = $interval(updateTime(), 1000); 

这不就是它的回调函数吗?它仍然是一个函数中的一个函数。在一个函数中有一个函数...在函数中有什么意义?

+0

你可能意思是'$ interval(updateTime,1000)',它是当前'updateTime'的方式立即被调用,而不是在1秒之后 –

+0

@AndrewWhitaker我不知道有什么区别,谢谢! – pv93

回答

1

因为该函数将被立即调用并且返回的值将被指定为间隔的回调。

但是,函数引用可以作为回调函数传递,该函数将在指定的时间间隔后调用。

timeoutId = $interval(updateTime, 1000); 
           ^: Removed() 
1

如果你有这样的功能:

timeoutId = $interval(function() { 
    updateTime(); 
}, 1000); 

有没有很多实际的差别与调用

timeoutId = $interval(updateTime, 1000); // Notice NO parens after "updateTime"! 

从技术上讲,第一个版本调用什么也不做,但功能调用另一个函数,这意味着微不足道的额外开销,并不值得担心。

你可能会这样做的一个原因是代码可读性:它可以更容易地“看到”第一个版本将回调作为第一个参数传递给$ interval(),因为它被写为函数。代码的运行速度并没有太大的差别,但如果您或其他人需要阅读并理解将来会发生什么,它会为您节省一些开发时间。

+0

这样做的其他原因我能想到的是,如果您有多个语句,即使您想在开发过程中添加'$ log.debug(something)',也需要额外的包装函数。如果你尝试使用'$ interval(some_object.updateTime,1000)',那么这个Javascript陷阱就会变成'this',这与你使用更长的变体时不一样。 – Duncan

相关问题