使用 document.write 时的脚本执行顺序

Order of script execution when using document.write

我需要 运行 一个名为 Fastclick 的库来处理移动设备上的 300 毫秒点击延迟。同时,如果我不 运行 在移动设备上,我不需要 运行 它。所以我想做这样的事情:

<head>
        <script>
        var UserAgent = navigator.userAgent;
        if (screen.width < 851 || UserAgent.indexOf('iPad') !== -1 || UserAgent.indexOf('iPhone') || UserAgent.indexOf('Android')) {
        document.write('<script src=\"/ExternalFiles/Fastclick.js\"></script>');
        }
        </script>

        //second script
        <script>
        if (FastClick) {...}
        </script>
</head>

如您所见,第二个脚本检查是否加载了 FastClick。在我的本地机器上,这有效。但是,我想知道它是否有效只是因为文件几乎是即时从文件系统加载的(即没有延迟),或者实际上 document.write 语句触发加载并且脚本执行暂停直到脚本已加载。我正在寻找后一种行为:通过 document.write 加载的脚本是否会暂停 JavaScript 解析,直到它们被加载?

为什么不始终包含该文件并仅在需要时才调用该函数?那么你不必考虑你的方式涉及的任何可能性:

<head>
        <script src="/ExternalFiles/Fastclick.js"></script>
        <script>
        var UserAgent = navigator.userAgent;
        if (screen.width < 851 || UserAgent.indexOf('iPad') !== -1 || UserAgent.indexOf('iPhone') || UserAgent.indexOf('Android')) {
                FastClick(...)
        }
        </script>
</head>

当非移动浏览器加载文件一次时,它在缓存中并且不会减慢页面加载速度。