我对这个问题的答案感到困惑:Execution of dynamically loaded JS files
我有一些HTML:
<html>
<head>
<script type="text/javascript" src="/scripts/onload.js"></script>
</head>
<body onload="loadscript()">
</body>
</html>
loadscript()
在头部插入另一个脚本。如何从插入的脚本中立即调用函数? (不使用jQuery)
编辑:要插入的脚本在运行时确定,具体取决于当前页面的路径。
答案 0 :(得分:0)
您无法立即在新脚本中运行代码,因为浏览器必须首先通过网络获取代码。这需要时间,因此它是一个异步操作 - 插入脚本标记的代码将在后台获取脚本时继续执行。
新脚本文件到达后,JavaScript引擎将尽快解析并执行它。如果某些其他JavaScript代码已经在执行(例如,事件处理程序),它将在执行新脚本之前等待该代码完成。 This article是JavaScript异步执行模型的一个很好的解释。
您无法准确控制新脚本的执行时间,但您可以从新脚本的顶层调用一个函数,以便尽快执行 :
function myFunction() {
// code to execute when the second script is included
}
myFunction();
如果您不需要在其他任何地方引用此功能,可以使用IIFE保存一些字符:
!function() {
// code to execute when the second script is included
}()
(或(function() { /* ... */ }())
,或IIFE语法的任何其他变体。)