在javascript中,将函数放入其他空函数的目的是什么?

在javascript中,将函数放入其他空函数的目的是什么?,javascript,angularjs,function,callback,Javascript,Angularjs,Function,Callback,我对Javascript和AngularJS以及web开发都是新手,当我在浏览时,我遇到了以下代码: // start the UI update process; save the timeoutId for canceling timeoutId = $interval(function() { updateTime(); // update DOM }, 1000); 为什么不能这样写: // start the UI update process; save the timeout

我对Javascript和AngularJS以及web开发都是新手,当我在浏览时,我遇到了以下代码:

// 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);

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

因为,函数将被立即调用,返回值将被指定为间隔的回调

timeoutId = $interval(updateTime, 1000);
                                ^: Removed ()
但是,函数引用可以作为回调函数传递,该回调函数将在指定的时间间隔后调用

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

因为,函数将被立即调用,返回的值将被指定为间隔的回调

timeoutId = $interval(updateTime, 1000);
                                ^: Removed ()
但是,函数引用可以作为回调函数传递,该回调函数将在指定的时间间隔后调用

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

如果您有这样一个函数:

timeoutId = $interval(function () {
    updateTime();
}, 1000);
打电话和打电话没什么实际区别

timeoutId = $interval(updateTime, 1000); // Notice NO parens after "updateTime"!
从技术上讲,第一个版本调用的函数只调用另一个函数,这意味着额外的开销很小,不值得担心


这样做的一个原因是为了代码的可读性:可以说,更容易“看到”第一个版本将回调作为第一个参数传递给$interval(),因为它是作为函数编写的。这对代码的运行速度没有多大影响,但如果您或其他人需要阅读并了解将来的情况,它可以为您节省一些开发时间。

如果您有这样一个函数:

timeoutId = $interval(function () {
    updateTime();
}, 1000);
打电话和打电话没什么实际区别

timeoutId = $interval(updateTime, 1000); // Notice NO parens after "updateTime"!
从技术上讲,第一个版本调用的函数只调用另一个函数,这意味着额外的开销很小,不值得担心


这样做的一个原因是为了代码的可读性:可以说,更容易“看到”第一个版本将回调作为第一个参数传递给$interval(),因为它是作为函数编写的。这对代码的运行速度没有多大影响,但如果您或其他人需要阅读并了解未来的情况,它会为您节省一些开发时间。

您可能指的是
$interval(updateTime,1000)
,它当前的
updateTime
方式会立即被调用,1点以后不行second@AndrewWhitaker我不知道有什么不同,谢谢!您可能指的是
$interval(updateTime,1000)
,它当前的方式是立即调用
updateTime
,而不是在1之后second@AndrewWhitaker我不知道有什么不同,谢谢!我能想到的其他原因是,如果您有多条语句,那么就需要额外的包装函数,即使您只是想在开发过程中添加
$log.debug(something)
。另外,如果您尝试
$interval(some_object.updateTime,1000)
作为
时,可能会出现Javascript陷阱,这与使用较长的变量时不同。我可以想到的其他原因是,如果您有多条语句,则需要额外的包装函数,即使只是想在开发过程中添加
$log.debug(某物)
。另外,如果您尝试
$interval(some_object.updateTime,1000)
作为
时,可能会出现一个Javascript陷阱,这与使用较长的变量时不同。