Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以使用HTML<;脚本延迟>;在之前执行<;脚本异步>;?_Javascript_Html_Asynchronous_Deferred - Fatal编程技术网

Javascript 可以使用HTML<;脚本延迟>;在之前执行<;脚本异步>;?

Javascript 可以使用HTML<;脚本延迟>;在之前执行<;脚本异步>;?,javascript,html,asynchronous,deferred,Javascript,Html,Asynchronous,Deferred,我问了一个关于这个问题的问题,这个问题已经被很好地探讨过了,我所问的问题有很多近似的答案,但我还没有找到一个简单问题的确切答案 我知道延迟脚本是按照它们在页面上出现的顺序运行的,但只有在构建DOM之后,我才能让异步脚本尽快运行,而且我知道两者都不会阻止HTML解析器 这里有一个问题:是否存在这样的情况:在所有异步脚本执行之前,可以执行延迟脚本?从本质上讲,如果HTML解析器已经解析了整个文档并准备好运行延迟脚本,但仍然有一些异步脚本尚未加载,它将等待这些异步脚本加载(并执行),还是运行延迟脚本

我问了一个关于这个问题的问题,这个问题已经被很好地探讨过了,我所问的问题有很多近似的答案,但我还没有找到一个简单问题的确切答案

我知道延迟脚本是按照它们在页面上出现的顺序运行的,但只有在构建DOM之后,我才能让异步脚本尽快运行,而且我知道两者都不会阻止HTML解析器

这里有一个问题:是否存在这样的情况:在所有异步脚本执行之前,可以执行延迟脚本?从本质上讲,如果HTML解析器已经解析了整个文档并准备好运行延迟脚本,但仍然有一些异步脚本尚未加载,它将等待这些异步脚本加载(并执行),还是运行延迟脚本


谢谢

从一个非常简单的测试来看,
延迟
似乎没有等待
异步
脚本加载。。。但是(总是有一个but)它似乎也取决于浏览器

我在Chrome 41、Firefox 36和Internet Explorer 11上进行了测试,在Chrome和FF上得到了相同的结果(在
异步
之前执行
延迟
),但在IE上得到了不同的结果(
异步
总是在
延迟
之前执行)

如果IE忽略了
async
属性(立即解析和执行代码),那么可以解释这一点,但是根据和,IE10支持
async
。因此,我猜想IE处理异步调用的方式与其他浏览器不同,使其加载和执行更快/在解析整个页面之前(然后在延迟脚本之前运行)

这是我用于测试的HTML代码:

<!doctype html>
<html>

    <head>
        <title>Test</title>
        <script type="text/javascript" src="./async.js"></script>
        <script type="text/javascript" src="./defer.js"></script>
    </head>

    <body>
        Testing
    </body>

</html>
以及defer.js的内容:

console.log("defer");
如果按“原样”运行,控制台结果是:

异步
推迟

这是意料之中的,因为脚本是在浏览器继续解析页面之前立即执行的

现在让我们玩一下
async
defer
,看看结果:


代码:

<script type="text/javascript" src="./defer.js" defer></script>
<script type="text/javascript" src="./async.js" async></script>
<script type="text/javascript" src="./async.js" async></script>
<script type="text/javascript" src="./defer.js" defer></script>
<script type="text/javascript" src="./async.js"></script>
<script type="text/javascript" src="./defer.js" defer></script>
<script type="text/javascript" src="./async.js" async></script>
<script type="text/javascript" src="./defer.js"></script>
结果:

<script type="text/javascript" src="./defer.js" defer></script>
<script type="text/javascript" src="./async.js" async></script>
<script type="text/javascript" src="./async.js" async></script>
<script type="text/javascript" src="./defer.js" defer></script>
<script type="text/javascript" src="./async.js"></script>
<script type="text/javascript" src="./defer.js" defer></script>
<script type="text/javascript" src="./async.js" async></script>
<script type="text/javascript" src="./defer.js"></script>
延迟
异步的


从一个非常简单的测试来看,
defer
脚本似乎在不等待
async
脚本加载的情况下运行。