![](/img/trans.png)
[英]How come my inner inner function has access to outside global-scope variables? Isn't that a violation of scope/closure?
[英]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對象的成員。 那么為什么我必須定義這樣的變量。 您能提供另一種方法嗎?
謝謝。
似乎您嘗試通過在一行上調用createElement
和setAttribute
全部來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.