嵌套异步Javascript

嵌套异步Javascript,javascript,asynchronous,loading,Javascript,Asynchronous,Loading,我使用指定的技术在触发window.onload()时加载外部javascript。但是,如果脚本本身包含一些加载事件处理程序的注册,那么它们可能不会被调用,因为事件已经(以某种方式)传递了。为了确认,我向如上所述加载的外部javascript文件添加了以下代码: (function() { if (window.attachEvent) window.attachEvent('onload', alert("ok")); else window.add

我使用指定的技术在触发window.onload()时加载外部javascript。但是,如果脚本本身包含一些加载事件处理程序的注册,那么它们可能不会被调用,因为事件已经(以某种方式)传递了。为了确认,我向如上所述加载的外部javascript文件添加了以下代码:


(function() {
   if (window.attachEvent)
       window.attachEvent('onload', alert("ok"));
   else
       window.addEventListener('load', alert("ok"), false);
})(); 

这个警报实际上出现了,这让我思考,是调用onload两次,还是加载javascript意味着加载脚本,运行其“全局”部分,然后转到下一个侦听器。在后一种情况下,如果在运行onload事件的“全局”部分时将另一个侦听器添加到onload事件,则此行为是正确的。但我不确定这一点,如果有更有经验的人能够澄清/确认,我将不胜感激

我相信在附加事件时调用警报,而不是在加载窗口时。这是因为您正在执行alert函数,然后将alert的结果(将为null)作为第二个参数传递给attachEvent

您正在执行的基本上是:

(function() {
    var returnValue;
    if (window.attachEvent) {
       returnValue = alert("ok");
       window.attachEvent('onload', returnValue);
    } else {
       returnValue = alert("ok")
       window.addEventListener('load', returnValue, false);
    }
})(); 
要测试您在问题中描述的内容,您需要修改代码:

(function() {
   if (window.attachEvent)
       window.attachEvent('onload', function() {alert("ok");});
   else
       window.addEventListener('load', function() {alert("ok");}, false);
})();