【问题标题】:Javascript code inside <BODY> runs *before* <SCRIPT>s in <HEAD> are fully loaded?<BODY> 中的 Javascript 代码在 <HEAD> 中的 <SCRIPT> 完全加载之前*运行?
【发布时间】:2012-06-22 07:57:16
【问题描述】:

当我使用缩小版 (ext-all.js) 时,一切都很好,但是当我用 ext-all-debug.js 替换它时(其他一切都完好无损),由于我知道的未定义值,firebug 会报告各种错误 em> 在我在 Ext 之后加载的 Ext 或其他 js 文件中定义。

经过反复试验,我将console.log()s 放在几个 js 文件的末尾,但没有出现。我认为使用ext-all-debug.js 会以某种方式导致&lt;BODY&gt;&lt;/BODY&gt; 中的js 代码在&lt;HEAD&gt; 中的脚本完全加载之前执行之前,这会导致“未定义”错误,因为@ 中的代码987654327@ 引用了应该预先加载的值。

对吗?

<HEAD>
<SCRIPT type="text/javascript" src="ext/ext-base.js"></SCRIPT>
<SCRIPT type="text/javascript" src="ext/ext-all-debug.js"></SCRIPT>
<SCRIPT type="text/javascript" src="my_lib.js"></SCRIPT> <!-- defines myValue -->
</HEAD>
<BODY>
<SCRIPT type="text/javascript">
console.log(myValue) // undefined
</SCRIPT>
</BODY>

这里是my_lib.js

var myValue = 10;
console.log("my_lib.js loaded");

还有

my_lib.js 已加载

不显示在控制台中。

【问题讨论】:

  • ext-all.js & ext-all-debug.js 是什么?
  • 您确定文件名正确吗?如果库无法加载,这将完美地解释您的错误消息。
  • @gdoron 它们是 ExtJS 核心文件
  • 如果my_lib.js 的执行依赖于ext-all-debug.js 并且后者没有正确加载,您的lib 将无法正确执行,而myValue 未定义。所以,再一次,你确定文件名是正确的吗?
  • 打开 firebug 并转到 net 选项卡,查看实际脚本是否正在下载

标签: javascript execution head


【解决方案1】:

只要脚本没有标记为延迟或异步或动态加载,它们就会按照在 HTML 文件中遇到的顺序执行。这是规范的一部分,因此可以保证。

如果您认为在之前的脚本中定义了 myValue,却发现它是未定义的,那么还有其他问题。

一些可能性是:

  1. 您的某个脚本存在错误,导致无法完全执行。
  2. 您的变量没有在全局范围内定义,而是在某个子范围内定义,因此当您尝试使用它时它在全局范围内不可用。
  3. 您的变量由前面的脚本定义,但未成功初始化为具有undefined 以外的值。
  4. 浏览器找不到您的脚本(因此无法加载/执行)。

如果您可以向我们展示显示问题的工作/非工作页面,我们可能会很快发现问题。由于现在没有显示问题的示例页面,我们只能推测可能的原因。

【讨论】:

    【解决方案2】:

    我想通了。似乎(我的)ext-all-debug.js 有问题。在 PhpStorm 中检查后,我发现了一些语法错误并修复了它们。现在一切正常。

    【讨论】:

    • 你不需要 ext-base.js 来运行 ext-all 吗?还是只是在以前的版本中?
    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多