Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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 全局变量不';脚本标记中外部.js文件之后的nt工作_Javascript - Fatal编程技术网

Javascript 全局变量不';脚本标记中外部.js文件之后的nt工作

Javascript 全局变量不';脚本标记中外部.js文件之后的nt工作,javascript,Javascript,下面是我的javascript代码: <script type="text/javascript"> var js = document.createElement("script"); js.type = "text/javascript"; js.src = "//mysite.co/js.js"; document.body.appendChild(js); alert(x); </script> 问题是警报不起作用。在谷歌chrome的控制台上说 未捕获引用

下面是我的javascript代码:

<script type="text/javascript">
var js = document.createElement("script");
js.type = "text/javascript";
js.src = "//mysite.co/js.js";
document.body.appendChild(js);

alert(x);

</script>
问题是警报不起作用。在谷歌chrome的控制台上说

未捕获引用错误:x未定义mypage:31 (匿名函数)

但如果我包括像这样的外部js文件

<script src="//mysite.co/js.js" type="text/javascript" ></script>

它起作用了

但是我需要第一种方法

解决办法是什么


谢谢。

当您将脚本标记附加到正文时,它们会尽可能地加载,而不是按顺序加载。这就是为什么要在文档加载完成时添加侦听器。例如,经典的jquery案例-

$.ready(function () {
    alert(x);
});
这应该可以工作,因为此时已加载脚本标记,并且已定义了
x
。此外,由于您已通过编程方式添加了脚本标记,浏览器将继续使用向
x
发出警报的脚本块,而不是等待加载引用的脚本

Edit-中提到了一种非jquery的方法


Per@nrabinowitz-应该说明这一点。ready确实会考虑动态添加的脚本。

当您将脚本标记附加到正文时,它们会尽可能地加载,而不是按顺序加载。这就是为什么要在文档加载完成时添加侦听器。例如,经典的jquery案例-

$.ready(function () {
    alert(x);
});
这应该可以工作,因为此时已加载脚本标记,并且已定义了
x
。此外,由于您已通过编程方式添加了脚本标记,浏览器将继续使用向
x
发出警报的脚本块,而不是等待加载引用的脚本

Edit-中提到了一种非jquery的方法


Per@nrabinowitz-应该表明。ready确实会考虑动态添加的脚本。

$。ready
实际上会等待动态添加的标记?这个答案的关键点是硬编码的脚本标记会按顺序加载,但动态添加的脚本标记会异步加载,他们的内容将不会立即提供。谢谢回复。但是,谷歌分析是如何做到这一点的?而且它是一个多站点项目,所以我不能使用jquery。@有一天-代码非常非常简单。看看我在答案中链接的答案。你可以做类似的事情。@Stephen我需要一个简单的电话。我还想在我的页面上的任何地方像谷歌分析那样做。我看到了你的链接。我开始警觉起来。但要提醒,我必须编写readyStateCheckInterval。有什么简单的方法可以做到这一点吗?Will
$。ready
实际上会等待动态附加的标记吗?这个答案的关键点是硬编码的脚本标记会按顺序加载,但动态附加的脚本标记会异步加载,并且它们的内容不会立即可用。感谢您的回复。但是,谷歌分析是如何做到这一点的?而且它是一个多站点项目,所以我不能使用jquery。@有一天-代码非常非常简单。看看我在答案中链接的答案。你可以做类似的事情。@Stephen我需要一个简单的电话。我还想在我的页面上的任何地方像谷歌分析那样做。我看到了你的链接。我开始警觉起来。但要提醒,我必须编写readyStateCheckInterval。有什么简单的方法可以做到这一点吗?