簡體   English   中英

為什么該變量在 function 內部工作,但當它放在 function 外部時卻沒有工作,盡管它具有全局 scope?

[英]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.

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