1

有人可以解释为什么控制台会这样吗?

我曾经发布过这个问题,但我不能完全正确地制定它,所以我再次关闭它。最初的问题没有提到问题可能与控制台有关,我只是质疑变量的奇怪行为。我基本上只发布了以下截图:

在此处输入图像描述

请注意,我$s.page在第 20 行登录并且$s.page.navi在那里,而在第 21 行,当我再次登录时它就消失了。

重新打开问题

没有人可以给出答案,尽管@zerkms暗示这可能与控制台本身有关。在我关闭问题后,他通过这篇文章与我联系:只有当我真正需要它们以重新打开问题时才加载我的文件。

问题

足够的介绍,回到问题。那么变量去哪了。从我发布的另一个问题中,您可以看到我使用 require.js 来加载我的文件。我对这一切有点陌生,所以我的问题与它有关。

$s.page我的代码中执行以下操作(简化):

require(['nav'], $.proxy(function(Nav){

    this.navi = new Nav.Views.Main();

}, this));

nav是 require.js 必须加载的模块。我脚本会阻塞,直到文件在那里,并查看控制台确认了这一点。

让我更详细地登录:

console.log('x');

require(['nav'], $.proxy(function(Nav){

    console.log('y');

    this.navi = new Nav.Views.Main();

}, this));

我将其他日志留在原处,这是输出:

在此处输入图像描述

请注意,x首先记录。然后当我登录$s.page 时,它$s.page会告诉我未来会是什么样子,我猜。真的很奇怪。

然后当我登录$s.page.navi下一行时,它不存在,这是正确的。

然后在最后,甚至不再被召唤,y加入了聚会。

4

1 回答 1

0

请参阅我调用的 router.js 的第 22 行$s.page.navi.start(),这就是这个问题的重点。它不能被解雇。我用以下代码解决了它:

require(['nav'], function(Nav){

    $s.page.navi.start();

});

它只会等待它的依赖项。

结论

在使用 JavaScript 以及诸如主干.js 和 require.js 之类的库时,您应该真正跟踪您在做什么,并记住该脚本不会轻易阻塞。

仅在应用程序中的某些点进行记录并不能总是帮助您解决问题,您必须真正从应用程序的根目录到叶子的顶端进行记录,以查看实际发生的情况。最好的方法总是在调试器中构建。

于 2012-05-08T06:49:47.667 回答