[英]Deciding when global variable should be inside the function or outside the function
[英]why the variable is working inside the function but not when it is placed outside the function though it has global scope?
我正在使用此代碼一次又一次地更改圖像:
<!DOCTYPE html>
<head>
<script src="C:\Users\Hp\Desktop\light bulb\js.js"></script>
</head>
<body>
<div>
<img id="goku" src="C:/Users/Hp/Desktop/normal goku.png" onclick="goku()">
</div>
</body>
<!--javascript code-->
let click = 1;
let x = document.getElementById('goku');
function goku() {
switch(click)
{
case 1 :
x.src = "C:/Users/Hp/Desktop/normal goku.png";click++;break;
case 2 :
x.src = "C:/Users/Hp/Desktop/super saiyan goku.png";click++;break;
case 3 :
x.src = "C:/Users/Hp/Desktop/super saiyan 3.jpg";click++;break;
case 4 :
x.src = "C:/Users/Hp/Desktop/super saiyan blue.jpg";click=1;break;
}
}
但它不工作。
而且,當我把let x = document.getElementById('goku');
在 function 內部,它工作正常。 如果這是因為變量的 scope,那么它也應該應用於click
變量,但click
變量工作正常。 你對這種行為有什么解釋嗎?
這是因為您的腳本在正文內容加載之前運行,您可以像這樣更改 html 內容來修復它
<!DOCTYPE html>
<head></head>
<body>
<div>
<img id="goku" src="C:/Users/Hp/Desktop/normal goku.png" onclick="goku()">
</div>
<script src="C:\Users\Hp\Desktop\light bulb\js.js"></script>
</body>
或者您可以像這樣在 function 中定義 x
let click = 1;
function goku(e) {
let x = e.target
switch(click)
{
case 1 :
x.src = "C:/Users/Hp/Desktop/normal goku.png";
click++;
break;
case 2 :
x.src = "C:/Users/Hp/Desktop/super saiyan goku.png";
click++;
break;
case 3 :
x.src = "C:/Users/Hp/Desktop/super saiyan 3.jpg";
click++;
break;
case 4 :
x.src = "C:/Users/Hp/Desktop/super saiyan blue.jpg";
click=1;
break;
}
}
該腳本在將img
元素添加到文檔之前執行。
如果let x = document.getElementById('goku')
在 function 之外,則執行該行時該元素還不存在。 如果它在 function 內部,則在單擊按鈕時執行該行,因此在將元素添加到文檔中之后很長時間。
您可以將script
標簽移到<body>
的末尾(就在</div>
之后),或者等到document
准備好調用getElementById
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.