使用document.write时的Javascript顺序
我对javascript在特殊情况下的执行顺序表示怀疑,如下所示。 我的页面标题中包含的js文件(使用document.write时的Javascript顺序,javascript,Javascript,我对javascript在特殊情况下的执行顺序表示怀疑,如下所示。 我的页面标题中包含的js文件(main.js)有时需要动态包含另一个js文件,如: document.write('<script src="userdata.js"></script>'); document.write(“”); 在第二个文件中定义了一个变量xmlFix 但是,如果我稍后在main.js中尝试引用此变量,它将失败。为什么?何时执行userdata.js?userdata.js将在当
main.js
)有时需要动态包含另一个js文件,如:
document.write('<script src="userdata.js"></script>');
document.write(“”);
在第二个文件中定义了一个变量xmlFix
但是,如果我稍后在main.js中尝试引用此变量,它将失败。为什么?何时执行
userdata.js
?userdata.js
将在当前脚本完成后执行。JavaScript确实按顺序运行,但您正在进行需要处理的DOM更改。假设以下代码:
HTML:
c、 js:
这些功能将按如下方式执行:
foo();
bar();
qux();
baz();
这是因为a.js
需要完成执行,浏览器才能移动到下一个DOM元素,该元素将是c.js
,然后是b.js
如果需要a.js
中的代码来使用b.js
或c.js
中定义的变量/函数,则需要在脚本执行完毕后使用回调。对于vanilla JS,向窗口添加回调。onload
比document.readystatechange
更简单、更一致,但后者性能更高
如果您使用的是jQuery库,通常会使用“document ready”(文档准备就绪)事件(应该是:
jQuery(function($){…code here…});
)对于一些替代方法,谢谢,您回答了我的问题,预见了我的后续问题(“如果我在main.js
?”之后已经包含了一个b.js
”,并且也回答了这个问题,那该怎么办呢!
foo();
document.write('<script src="c.js"><\/script>');
bar();
baz();
qux();
foo();
bar();
qux();
baz();