簡體   English   中英

JavaScript在函數外部定義變量

[英]JavaScript define variable outside function


我試圖做一個變量,可以用html <input type="number">繼續添加數字。
我希望通過單擊帶有輸入值的按鈕來更改變量。 再次單擊按鈕,我希望變量將第二個輸入添加到先前更改的數字。
使用以下代碼,我得到帶有輸入值的NaN消息,因為var num是未定義的:

<body>
        <span id="number"></span>
        <input id="addnum" type="number" style="width:60px; height:20px;">
        <button onclick='add()'>Add</button>

    <script>
        var num = 0;

        window.onload = function numstart() {
            document.getElementById('number').innerHTML = num;
        }

        function add() {
            var addnum = parseInt(document.getElementById("addnum").value);
            var num = num + addnum;
            document.getElementById('number').innerHTML = num; 
        }
    </script>
</body>

但是如果我定義var num = 0; 在函數中,每次調用函數時,數字都會重置。 如何在函數中定義變量num而不在調用時重置其值?

您正在add()函數中重置num ,這沒有多大意義:

var num = num+addnum;

意思是“創建一個新變量num,其值為num + addnum,但是等等,您剛剛定義了num,所以...”

您要引用全局變量。 嘗試這個:

num += addnum;

要么

num = num+addnum;

你可以做這樣的事情

<body>
    <span id="number"></span>
    <input id="addnum" type="number" style="width:60px; height:20px;">
    <button onclick='add()'>Add</button>

<script>
    var num = 0;

    window.onload = function numstart() {
        document.getElementById('number').innerHTML = num;
    }

    function add() {
        var addnum = parseInt(document.getElementById("addnum").value);
        num = num + addNum;
        document.getElementById('number').innerHTML = num; 
    }
</script>

發生了一些棘手的起吊事情,使您感到困惑。 您的代碼與此等效:

function add() {
    var addnum = parseInt(document.getElementById("addnum").value);
    var num;

    num = num + addnum;
    document.getElementById('number').innerHTML = num; 
}

現在為什么它很明顯num的功能塊中未定義, num聲明,但沒有定義 ,因此它的undefined ,以及局部聲明陰影外num 因此,您當然會得到NaN

修復很簡單,只需刪除var關鍵字即可直接與外部范圍num

嘗試這個:

<html>
<head>
<script>    
        function add() {                
            document.getElementById('number').innerHTML =  parseInt(document.getElementById('number').innerHTML)+1; 
        }
    </script>
</head>
<body>
        <span id="number"></span>
        <input id="addnum" type="number" style="width:60px; height:20px;">
        <button onclick='add()'>Add</button>       
</body>
</html>

之所以遇到這個問題,是因為每次單擊時,函數都會重新開始,然后結束,並釋放其分配的內存空間。

暫無
暫無

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

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