Javascript 如果使用document.write,是否同步加载Java脚本?

Javascript 如果使用document.write,是否同步加载Java脚本?,javascript,ajax,document.write,Javascript,Ajax,Document.write,如果像这样将javascript加载到页面,是否相同: <script src="http://domain.net/script.js" type="text/javascript"></script> 像这样 <script type="text/javascript"> document.write("<script src='http://domain.net/script.js' type='text/javascript'>&

如果像这样将javascript加载到页面,是否相同:

<script src="http://domain.net/script.js" type="text/javascript"></script>

像这样

<script type="text/javascript">
  document.write("<script src='http://domain.net/script.js' type='text/javascript'></script>");

文件。填写(“”);
我在js中有很多依赖项,希望将其配置为一个单独的数组,这些数组以如下方式捆绑在index.html中:

<script type="text/javascript">
  for (i in config.files.javascripts) {
    document.write("<script src='config.files.javascripts[i]' type='text/javascript'></script>");
  }
</script>

for(config.files.javascripts中的i){
文件。填写(“”);
}
问题是-它是否应按预期工作,以便在加载前一个文件之前不执行下一个文件

这是因为我正在做的前端没有服务器端,它有时也会作为小部件工作,不过对于开发和测试,我们应该加载未合并和未压缩的文件进行测试


谢谢

如果您希望以正确的顺序异步加载javascript脚本,我建议您使用Twitter javascript开发负责人开发的$script.js


真是太棒了

回答您的问题:是的,加载了
document.write
的脚本保证按照所写的顺序执行

这同样适用于使用W3CDOM方法加载的脚本

var scriptElm = document.createElement('script');
scriptElm.defer = true; // Causes faster (parallel) loading in some browsers.
scriptElm.src = 'path/to/script.js';
document.getElementsByTagName('head')[0].appendChild( scriptElm );
这就是说,
document.write()
通常被认为是非常糟糕的做法(出于各种原因),并且可能会在以后导致破损和恼人的边缘案例问题。一、 因此,建议您使用上面所示的W3CDOM注入(如果没有其他内容的话)

--
还有一些脚本加载库,使这种资源加载更容易、更优雅,有时甚至更快。有些脚本并行加载,但以可预测的顺序执行,就像@CoBaLt2760已经链接到的脚本一样

jQuery还有一个非常简单的方法
$.getScript('path/to/script.js')()。如果内存适合我的话,它使用简单的W3CDOM注入


如果您对这些库的更多链接感兴趣,可以在StackOverflow,com上搜索“javascript加载”或类似的内容。

如果您的
config.files.javascripts
是一个数组,那么您不应该在
中对
使用
,因为该语法用于循环对象中的命名键

对于数组,循环语法使用传统的C样式:

for (var i=0; i<array.length; i++) {

for(var i=0;iSomeone曾经发布了一个完整的队列,以确保按特定顺序加载脚本()。非常感谢您的广泛帮助,现在我看到为这个选择一个库是最好的解决方案。就像每个人和他们的猫一样,我当然也编写了自己的脚本加载器:在我的例子中,易用性是重点。与DOM添加相关的内联脚本似乎不是这样,而
document.write
执行请看:有趣的是,twitter本身似乎确实在使用lab.js:)。Ded开发了自己的$script.js,因为他对lab.js并不完全满意/也许在下一次Twitter代码更新中^^使用这些脚本加载器所需的开销代码会很快变得非常复杂。有些还非常突出,因为它们要求脚本本身了解脚本加载框架。“快速”并不是唯一需要担心的事情——易用性也非常重要。
var headerElm = document.getElementsByTagName('head')[0],
    scripts = config.files.javascripts;

for (var i=0, l=scripts.length; i<l; i++)
{
  var scriptElm = document.createElement('script');
  scriptElm.defer = true; // causes faster (parallel) loading in some browsers.
  scriptElm.src = scripts[i];
  headerElm.appendChild( scriptElm );
}