簡體   English   中英

為什么我的JavaScript函數不能訪問其他.js文件中定義的全局作用域函數/變量?

[英]Why isn't my JavaScript function able to access global-scope functions/variables defined in my other .js files?

我寫了這樣的腳本:

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對象的成員。 那么為什么我必須定義這樣的變量。 您能提供另一種方法嗎?

謝謝。

似乎您嘗試通過在一行上調用createElementsetAttribute全部來createElement代碼的快捷方式,但是setAttribute不返回任何內容,因此您無法對其返回值調用appendChild ,因為沒有返回值,這將解決此問題:

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

編輯:

您在哪種環境中運行代碼? 是跨站點發生的事情,還是您在另一個函數中定義了qux? 以下對我有用,通過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);

頁面加載時,我收到帶有“名稱”的警報。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM