【问题标题】:What is the purpose of putting a function in an otherwise empty function in javascript?将函数放入javascript中的其他空函数的目的是什么?
【发布时间】:2016-01-22 15:49:08
【问题描述】:

我是 Javascript 和 AngularJS 以及 Web 开发的新手,在查看 Angular docs on directives 时,我遇到了这段代码:

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

这样不还是回调函数吗?它仍然是函数中的函数。在函数中包含函数有什么意义……在函数中?

【问题讨论】:

  • 你的意思可能是$interval(updateTime, 1000),现在updateTime的方式是立即调用,而不是在1秒之后
  • @AndrewWhitaker 我不知道有什么区别,谢谢!

标签: javascript angularjs function callback


【解决方案1】:

因为,函数会立即被调用,返回值会被赋值为区间的回调。

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

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

【讨论】:

    【解决方案2】:

    如果你有这样的功能:

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

    与调用并没有太大的实际区别

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

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

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

    【讨论】:

    • 我能想到的其他原因是,如果您有多个语句,则需要额外的包装功能,即使您想在开发过程中添加$log.debug(something)。如果您尝试使用$interval(some_object.updateTime, 1000),还有一个潜在的 Javascript 陷阱,因为this 与您使用更长的变体时不同。
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多