我写了一个这样的剧本:
NS.load = function(src) {
var script = document.createElement("script").setAttribute("src", src);
document.getElementsByTagName("head")[0].appendChild(script);
}
它加载文件,但我无法访问其他文件中定义的函数和变量。
//js/main.js
var qux = {name: "name"};
NS.load("js/foo.js");
//js/foo.js
alert(qux.name); //undefined variable
但如果我像这样定义qux:
window.qux = {name: "name"};
我可以在其他模块中访问qux变量。据我所知,所有全局变量都已经是window对象的成员。那么为什么我必须定义这样的变量。你能提供另一种方法吗?
感谢。
答案 0 :(得分:7)
您似乎尝试通过在一行中调用createElement
和setAttribute
全部来简化代码,但setAttribute
不返回任何内容,因此您无法调用{ {1}}它的返回值,因为没有。这将解决它:
appendChild
修改强>
您运行代码的环境是什么?是跨站点发生的事情还是你在另一个函数内定义qux?以下适用于我,通过http://localhost/test.html
运行文件NS.load = function(src) {
var script = document.createElement("script");
script.setAttribute("src", src)
document.getElementsByTagName("head")[0].appendChild(script);
}
foo.js:
<html>
<head>
<script type="text/javascript">
load = function(src) {
var script = document.createElement("script");
script.setAttribute("src", src);
document.getElementsByTagName("head")[0].appendChild(script);
}
var qux = {name: "name"};
load("foo.js");
</script>
</head>
<body></body>
</html>
页面加载时,我收到带有“名称”的提醒。