[英]global scope not accessible inside of function?
為什么此代碼有效?
function run(){
var name =document.getElementById('name');
name.classList.toggle('name');
}
但是這段代碼沒有嗎? var名稱是在全局范圍內定義的,那么為什么不能在run函數中訪問它?
var name =document.getElementById('name');
function run(){
name.classList.toggle('name');
}
直到完全解析DOM之后,才調用run()
,因此當它嘗試執行時: document.getElementById('name');
,將找到該元素。
但是,當從run()
提取該行並將其放置在函數外部時,將在完全解析DOM且未找到該元素之前對其進行調用。
您可以通過將所有代碼(或對代碼的script
引用)放在結束body
標簽( </body>
)之前來解決此問題。 到瀏覽器遇到此問題時,所有HTML都將被解析到內存中,並且可以找到該元素。
.name { background: red; color: white; }
<!doctype html> <html> <head> </head> <body> <div id="name" class="name" onclick="run()">Name</div> <!-- When the script is placed after all the other body content, it will be able to scan the DOM for any of that content. --> <script> var other =document.getElementById('name'); function run(){ other.classList.toggle('name'); } </script> </body> </html>
而且,正如我在評論中提到的那樣,最好不要命名任何name
因為name
是Global window
對象的屬性,並且當您使用該標識符時會出現復雜性。
name
是全球財產,即。 window.name。 將變量定義為其他內容:
var other =document.getElementById('name'); function run(){ other.classList.toggle('name'); }
.name { background: red; color: white; }
<div id="name" class="name" onclick="run()">Name</div>
現在它將正常工作。
雖然您使用名稱,但會引發錯誤:
var name =document.getElementById('name'); function run(){ name.classList.toggle('name'); }
.name { background: red; color: white; }
<div id="name" class="name" onclick="run()">Name</div>
這里發生了什么?
您正在使用和html對象修改窗口屬性名稱。 而且您正在使用classList,它實際上是html對象的屬性,而不是window的屬性。 因此,訪問window屬性的classList屬性(盡管已將其轉換為html對象,但仍然是window對象)顯然會引發未定義的錯誤。
因此,強烈建議不要更改全球財產。
在本地范圍內,您無需修改window屬性,而是定義本地變量,這樣就可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.