Can';t从动态加载的javascript访问变量

Can';t从动态加载的javascript访问变量,javascript,dynamic,variables,loading,Javascript,Dynamic,Variables,Loading,我使用一个相当简单的系统动态加载javascript: include = function (url) { var e = document.createElement("script"); e.src = url; e.type="text/javascript"; document.getElementsByTagName("head")[0].appendChild(e); }; 假设我有一个文件test.js,它包含以下内容: var foo = 4; 现在,在我的

我使用一个相当简单的系统动态加载javascript:

include = function (url) {
  var e = document.createElement("script");
  e.src = url;
  e.type="text/javascript";
  document.getElementsByTagName("head")[0].appendChild(e);
};
假设我有一个文件test.js,它包含以下内容:

var foo = 4;
现在,在我的原始脚本中,我想使用

include(test.js);
console.log(foo);

然而,我得到一个“foo尚未定义”错误。我猜这与动态脚本作为
标记的最后一个子项有关。我怎样才能让它工作呢?

这是一个问题,但浏览器下载和解析远程JS文件也需要时间,而在调用
控制台.log
之前,它还没有这样做

您需要将事情延迟到脚本加载完毕


最简单的方法是让库执行繁重的工作,jQuery有一种方法,允许您在加载脚本时传递回调以运行。

这是因为您必须等待脚本加载。它不像你想象的那样是同步的。这可能适用于您:

include = function (url, fn) {
    var e = document.createElement("script");
    e.onload = fn;
    e.src = url;
    e.async=true;
    document.getElementsByTagName("head")[0].appendChild(e);
};

include("test.js",function(){
    console.log(foo);
});

很好的简单脚本。但我们如何将故障事件(如未建立连接或404等)合并到这一过程中。。