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

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

问题是警报不起作用。在谷歌浏览器的控制台中显示

Uncaught ReferenceError: x is not defined mypage:31 (anonymous function)

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

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

它有效。

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

解决办法是什么?

谢谢。

最佳答案

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

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

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

编辑 - Javascript - How to detect if document has loaded (IE 7/Firefox 3) 中提到了执行此操作的非 jquery 方法。

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

关于javascript - 全局变量在脚本标记中的外部 .js 文件后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20363742/

相关文章:

javascript - 所有对象键减一

javascript - onclick 属性未按预期工作

javascript - 如何顺序运行 getJSON

javascript - 无法在javascript中再次调用匿名函数吗?

javascript - Javascript中的反括号

javascript - 使用正确的语法创建 .each() 函数

javascript - 我可以使用 CSS direction 来定位元素的滚动条吗?

javascript - 我正在开发一个 Vuejs 聊天应用程序,单击输入消息框时,如何在 Android 中显示键盘时发送整个输入 div

javascript - 在模态中打开 URL

javascript - 当 div 中的输入元素处于焦点状态时按下 Enter 键时会重复 div