我在定義一個新變量時使用var
關鍵字閱讀了一些帖子。帖子提到如何在一個函數內使用var
創建一個局部範圍的變量,而不使用var
關鍵字創建一個具有全局範圍的變量。大多數帖子建議始終使用var
。我有幾個問題:在Javascript中定義變量時使用var關鍵字
我學習JS,我試圖寫一個計數的次按鈕被點擊數的腳本(請參見下面的代碼)。如果在功能
totalClicks
的else
部分,我使用var numclicks = 1;
,那麼下面的代碼不工作。如果我省略了var
關鍵字,它可以工作。這是因爲代碼工作numclicks
需要是一個全局變量,還是有其他一些原因?這是否應該總是使用var
的規則是一個例外,或者有另一種方法來編程。第一次單擊該按鈕時,輸出爲
NaN
。我不清楚爲什麼它不是1?遵循代碼的邏輯,在寫入文檔之前,該變量看起來被設置爲1。我知道如果在函數聲明之前添加numclick = 0;
,問題就解決了。但我不清楚爲什麼這能解決問題。
非常感謝您的幫助。
CODE
<html>
<head>
<title>Count number of clicks</title>
</head>
<body>
<form>
<input type="button" value="click here" onclick="totalClicks();">
</form>
Total clicks: <span id="numclicks"></span>
<script type="text/javascript">
function totalClicks(){
if (window.numclicks) {
numclicks++;
}
else {
numclicks = 1;
}
document.getElementById("numclicks").innerHTML = numclicks;
}
</script>
</body>
</html
Slava給出了一個礦石的完整答案,但對於您的信息,Javascript具有相當瘋狂的吊裝概念。一旦你理解了它,這真的很簡單,直到你做的事情看起來真的很bizzarre。這裏是一個非常簡短的文章:http:// elegantcode。com/2010/12/24/basic-javascript-part-5-hoisting/ – 2011-12-17 22:51:25
@George Mauer我喜歡該網站的網頁設計:) – ajax333221 2011-12-17 23:01:59
@ George - 感謝您的聯繫。我查過這篇文章,但以下內容仍不清楚。作者說:「但函數範圍意味着在函數中聲明的所有變量和參數在該函數內的任何地方都是可見的,即使在聲明該變量之前。」如果它們在任何地方都可見,爲什麼第一個輸出是'undefined''。 「到處可見」是什麼意思? – Curious2learn 2011-12-17 23:39:01