console.log中的奇怪变量未定义错误

时间:2012-05-08 06:46:48

标签: javascript google-chrome console

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

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

enter image description here

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

重新开启问题

虽然@zerkms建议它可能与控制台本身有关,但没有人可以给出答案。关闭问题后,他通过这篇文章与我联系:Have require.js load my files only when I actually need them或许可以重新打开这个问题。

问题

足够介绍,回到这个问题。那么变量去了哪里。从我发布的另一个问题,您可以看到我使用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));

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

enter image description here

请注意,首先记录x。当我记录$s.page 时,它会告诉我$s.page将来会是什么样子,我想。真奇怪。

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

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

1 个答案:

答案 0 :(得分:0)

见router.js第22行,我打电话给$s.page.navi.start(),这就是这个问题的重点。它无法解雇。我用以下代码解决了它:

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

    $s.page.navi.start();

});

它只会等待它的依赖。

结论

使用JavaScript以及backbone.js和require.js等库时,您应该真正跟踪自己在做什么,并记住脚本不会轻易阻止。

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