admin管理员组

文章数量:1356836

I wrote a script like that:

NS.load = function(src) {
    var script = document.createElement("script").setAttribute("src", src);
    document.getElementsByTagName("head")[0].appendChild(script);
}

It loads files but I can't reach functions and variables defiened in other files.

//js/main.js
var qux = {name: "name"};
NS.load("js/foo.js");

//js/foo.js
alert(qux.name); //undefined variable

But if I define qux like this:

window.qux = {name: "name"};

I can reach qux variable in other modules. As far as I know all globals are already a member of window object. So why I have to define variables like this. Could you offer another method?

Thanks.

I wrote a script like that:

NS.load = function(src) {
    var script = document.createElement("script").setAttribute("src", src);
    document.getElementsByTagName("head")[0].appendChild(script);
}

It loads files but I can't reach functions and variables defiened in other files.

//js/main.js
var qux = {name: "name"};
NS.load("js/foo.js");

//js/foo.js
alert(qux.name); //undefined variable

But if I define qux like this:

window.qux = {name: "name"};

I can reach qux variable in other modules. As far as I know all globals are already a member of window object. So why I have to define variables like this. Could you offer another method?

Thanks.

Share Improve this question edited Jul 8, 2017 at 20:23 Nathan Wailes 12.4k10 gold badges75 silver badges114 bronze badges asked Jan 11, 2010 at 12:35 jsonxjsonx 1,0893 gold badges14 silver badges21 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 7

It looks like you tried to shortcut your code by calling createElement and setAttribute all on 1 line, but setAttribute doesn't return anything, so you can't go calling appendChild on it's return value, because there is none.This will fix it:

NS.load = function(src) {
    var script = document.createElement("script");
    script.setAttribute("src", src)
    document.getElementsByTagName("head")[0].appendChild(script);
}

Edit:

What sort of environment are you running your code in? Is something happening cross-site or are you defining qux inside of another function? The following works for me, running the files via http://localhost/test.html

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

foo.js:

alert(qux.name);

I get an alert with "name" when the page loads.

本文标签: