在控制流之外调用的函数?

时间:2015-07-08 01:31:28

标签: javascript function

所以,我一直试图通过我的浏览器调试器来运行它来了解特定的js库,而且发生的事情让我感到困惑。

我第一次在Phaser游戏库中遇到过这种情况,但我也看到了另一个库。我将以Phaser为例:

<script>
(function(){
    var game = new Phaser.Game(800, 600, Phaser.CANVAS, '');
    game.state.add('Game', Game);
    game.state.start('Game');
})();
</script>

所以匿名函数完成了一些设置,然后我跳过这个函数,经过几个步骤(同时指针位于html doc的顶部)我的程序无处不在到此为止:

Phaser.Device._readyCheck = function () {

var readyCheck = this._readyCheck;

....

}

在我的控制流程中看起来没有任何东西称为该功能,所以我是如何到达这里的?什么叫这个功能?我已经读过一些关于异步功能的信息。这听起来像是一个很好的解释,但我在谷歌上看到的东西并没有真正解释清楚,所以我不能说我理解得足以确定。我对JavaScript比较陌生。

2 个答案:

答案 0 :(得分:0)

您在顶部指出的功能是一个自动执行功能。 ();会导致前面括号中包含的所有内容立即执行。

答案 1 :(得分:0)

库为各种事件设置事件处理程序,然后以异步方式调用它们。在这种情况下,事件处理程序被设置为监视DOM的加载的完成,以便可以初始化库的内部状态。您可以在源

中看到它是如何发生的

src/system/Device.js:Phaser.Device._readyCheck

Phaser.Device.whenReady在同一个文件中。通过一点点搜索,您可以轻松找到何时调用。