浏览器Javascript引擎总是单线程?

时间:2013-02-19 23:32:48

标签: javascript html browser

我有一个包含2个Javascript文件的网页。第二个文件需要前面的文件。更具体地说,在我的第二个Javascript文件中,我立即使用jQuery的.ajax()方法。是否有可能在一个非常有限的情况下,当我使用它时jQuery可能还没有准备好?

注意:我不想使用$(document).ready(),我不想使用require.js或head.js等库。我只是想确信当我使用它时jQuery会存在,并且Javascript的单线程特性即使在边缘情况下也会得到尊重。

4 个答案:

答案 0 :(得分:5)

如果在需要使用$.ajax()方法的文件之前引用了jQuery,则可以确信jQuery可以使用。

要明确的是,$(document).ready()并不能确保 jQuery 已准备就绪,但是DOM已经可以随时操作了。

答案 1 :(得分:2)

是的,Javascript是严格单线程的,在解析下一个脚本之前,每个脚本都会被解析。

第二个脚本在没有第一个脚本运行的情况下运行的唯一情况是,如果请求第一个脚本失败,但是请求第二个脚本成功,但是如果脚本无法加载,那么无论如何都是非常困难。 / p>

答案 2 :(得分:2)

<script>包含src属性的脚本会按顺序加载。因此,如果您有设置

<script src="one-file"></script>
<script src="other-file"></script>

... one-file 必须完成下载和执行,然后文档才能继续解析(即在检索其他文件之前开始)。这与deferasync属性不同,但您可能省略了这些属性。

如果我的答案不够安心,I gleaned it from the HTML spec itself

答案 3 :(得分:0)

请阅读:http://api.jquery.com/category/events/document-loading/,您实际上是在代码将在页面开头运行时进行设置。如果你想使用$(document).ready(),这是必须的,尽管我们大多数人都把它看作是:

$(function() {};

我不确定您的关注是否有效,您还没有真正指出一个问题,您无法通过测试应用程序来弄清楚自己,但也许您可能想要做的事情,如果您遇到jscript代码在多js文件环境中执行之前(再次为什么不使用1,尤其是如果你不熟悉技术细节)是:How to load one JavaScript file from another?从你的jscript 耸肩加载jscript

$.getScript("another_script.js");