内部的Javascript代码在<HEAD>中的* <script>之前运行*是否已完全加载?</script>

时间:2012-06-20 07:57:53

标签: javascript execution head

当我使用缩小版本(ext-all.js)时,一切都很好但是当我用ext-all-debug.js替换它(其他一切都完好无损)时,firebug报告由于未定义的值而导致的各种错误> know 在我在Ext。

之后加载的Ext或其他js文件中定义

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

对吧?

<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已加载

未显示在控制台中。

2 个答案:

答案 0 :(得分:2)

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

如果您认为myValue在早期脚本中定义了undefined未定义,那么还有其他一些问题。

一些可能性是:

  1. 您的一个脚本出现阻止完全执行的错误。
  2. 您的变量未在全局范围内定义,而是在某个子范围内定义,因此当您尝试使用它时,它在全局范围内不可用。
  3. 您的变量由上一个脚本定义,但未成功初始化为{{1}}以外的值。
  4. 浏览器找不到您的脚本(因此没有加载/执行)。
  5. 如果您可以向我们展示显示问题的工作/非工作页面,我们很可能会很快发现问题。由于现在没有显示问题的样本页面,我们只能推测可能的原因。

答案 1 :(得分:0)

我明白了。看来(我的)ext-all-debug.js是错误的。在PhpStorm中检查后,我发现了很少的语法错误并修复了它们。现在一切都很好。