全局变量在脚本标记中的外部.js文件之后不起作用

时间:2013-12-03 23:20:21

标签: 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>

在mysitecom / js.js文件中就是那样

var x = '1233123';
//some code

问题是警报不起作用。在谷歌C​​hrome的控制台说

  

未捕获的ReferenceError:x未定义mypage:31   (匿名函数)

但是,如果我包含这样的外部js文件;

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

有效。

但我需要第一种方法......

修复是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

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

$.ready(function () {
    alert(x);
});

这应该可行,因为此时已加载脚本标记,并且已定义x。此外,由于您已经以编程方式添加了脚本标记,因此浏览器将继续使用警告x的脚本块,而不是等待引用的脚本加载。

编辑 - Javascript - How to detect if document has loaded (IE 7/Firefox 3)

中提到了一种非jquery方式

Per @nrabinowitz - http://jsfiddle.net/7br7q/应该表明.ready确实会考虑动态添加的脚本。