Javascript 即思维对象不是';未加载

Javascript 即思维对象不是';未加载,javascript,internet-explorer,Javascript,Internet Explorer,我有如下代码: <script src="library.js"></script><!-- loads window.lib and lib.subLib --> <script> if (!window.lib) { alert("foo") }; //Triggers, despite library.js being loaded fine lib.custLib = function(b) { ... }(lib.subLib); //W

我有如下代码:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
if (!window.lib) { alert("foo") }; //Triggers, despite library.js being loaded fine
lib.custLib = function(b) { ... }(lib.subLib); //Works fine, even though IE JUST said that window.lib wasn't loaded
</script>
在位置栏中,将触发警报,指示window.lib已加载。如果我打字

javascript:if(!window.lib)alert("foo");
警报没有发出,证实了这一点!window.lib的计算结果不是true

我能得出的唯一结论是library.js在某种程度上完成了执行,从我第一次检查window.lib是否存在到我在函数声明之后的即时调用中实际使用lib.subLib

编辑:其他信息

我找到了一个解决办法,但首先,要注意一些有趣的事情

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
alert(!window.lib) //True
if (!window.lib) {
  alert(!window.lib) //True
}
</script>

警报(!window.lib)//True
如果(!window.lib){
警报(!window.lib)//True
}
与之相比:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
alert(!window.lib) //False
</script>
<script>
if (!window.lib) {
  alert(!window.lib) //True
}
</script>

警报(!window.lib)//错误
如果(!window.lib){
警报(!window.lib)//True
}
以及解决办法:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
var foo = !window.lib;
</script>
<script>
if (foo) {
  alert(!window.lib) //Doesn't get triggered
}
</script>

var foo=!window.lib;
如果(foo){
警报(!window.lib)//未被触发
}

总之,这似乎是Internet Explorer中的一个bug。解决方法是使用一个单独的脚本块,将变量的值设置为!然后在下一个脚本块中检查该变量,而不是检查!直接使用window.lib。

这是什么
lib
?在何处以及如何声明和分配?没有代码,我们只能猜测。如果有关系的话,那就可以回答我的问题了。我的理解是,library.js应该在运行下一段脚本之前完全完成,即使library.js是一个外部文件,下面的脚本是内联的。不是这样吗?它们是并行运行的,还是内联脚本可以在library.js中的所有代码完成执行之前运行?这不是我要问的。我认为问题在于外部脚本内部。例如,它可能会在计时器中初始化
lib
,或者只在页面加载后初始化。@Shadow向导,这两种情况都不是这样。该脚本是由下一个多维数据集中的家伙编写的内部脚本,我非常熟悉他的代码,它不会以任何方式延迟任何组件的执行。
<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
var foo = !window.lib;
</script>
<script>
if (foo) {
  alert(!window.lib) //Doesn't get triggered
}
</script>