javascript - 来自其他脚本的变量有时无法加载
问题描述
我有两个 JavaScript 脚本按此顺序链接到我的 HTML 文件:
<script src="first.js"></script>
<script src="second.js"></script>
first.js 有一个由 second.js 访问的变量。变量由文件末尾的 second.js 使用,变量在开头的 first.js 中定义。每当我重新加载站点时,偶尔会出现控制台错误,提示未定义 first.js 中的变量。
未捕获的 ReferenceError: dbis 未在 second.js:80 定义
为什么是这样?提前致谢。
完整示例:
第一个.js:
var db = [{name: "Obj1", property: "property1"}, {name: "Obj2", property: "property2"}]; // At Line 8
第二个.js:
function loadDbItems() {
for(i = 0; i < db.length; i++) {
console.log(db[i].name); // Line is Near End of Script
}
}
解决方案
您可以注册变量window
以使其具有全局保证。
请参阅下面的脚本示例。
你不应该用你需要的每一个小变量来污染window
对象,但是这样变量将存在于脚本中,前提是第一个先执行。
window.db = [{name: "Obj1", property: "property1"}, {name: "Obj2", property: "property2"}];
<html>
<body onload="loadDbItems()">
<script>
function loadDbItems() {
for(var i = 0; i < window.db.length; i++) {
console.log(window.db[i].name);
}
}
</script>
</body>
</html>
推荐阅读
- c++ - 如何使用 std::upper_bound() 获取元素的索引?
- javascript - 需要具有属性动态节点的模块 - Javascript
- python - Python客户端套接字正在连接,即使服务器不接受新连接并且积压大小为0
- python - 如何使用 Spark BigQuery 连接器连接多个表,然后将数据提取到数据框中?
- react-native - 从堆栈导航返回时,OnDidFocus 事件不起作用
- promql - 包含用于元数据目的的标签,而不对其进行聚合
- python - 从python中的数据透视表中提取源数据
- flutter - 如何获取小部件在屏幕中的位置(最好在偏移中)?
- haskell - 哈斯克尔。需要按照它们遵循的顺序展平列表中的相同元素
- vue.js - Vue.js 处理 crud 导航上的后退按钮