我一直在尋找網絡上的計算器代碼,並且發現了類似下面的代碼。爲什麼變量在Javascript中的函數之前聲明
但我在腦海裏有一個問題。爲什麼程序員在創建函數之前聲明變量?
var getValues= "";
function updateField(val) {
getValues += val;
document.calc.putValues.value = getValues;
}
請親切地幫我回答我的問題。
謝謝大家。
我一直在尋找網絡上的計算器代碼,並且發現了類似下面的代碼。爲什麼變量在Javascript中的函數之前聲明
但我在腦海裏有一個問題。爲什麼程序員在創建函數之前聲明變量?
var getValues= "";
function updateField(val) {
getValues += val;
document.calc.putValues.value = getValues;
}
請親切地幫我回答我的問題。
謝謝大家。
你知道,變量實際上可以在函數中聲明。但是它必須在使用之前聲明,意味着在函數被調用之前。
我創建了一個測試場景來展示我的意思。
我創建了一個名爲test.html
用以下簡單的文本文件的內容:
<script type="text/javascript">
var a = "hello"; // <- the declaration of the variable before the function
function b(){ // <- the actual function
a += " world";
alert(a);
}
b(); // <- and here it is called
</script>
如果我在Firefox4加載這個文本文件(文件://$path_to_file/test.html)我得到一個警告框與消息Hello world
。
然後,我改變了順序:
<script type="text/javascript">
function b(){ // <- the actual function
a += " world";
alert(a);
}
var a = "hello"; // <- the declaration of the variable under the function
b(); // <- and here it is called
</script>
的結果是一樣的:Hello World
但是,當我把聲明的號召下是這樣的:
<script type="text/javascript">
function b(){ // <- the actual function
a += " world";
alert(a);
}
b(); // <- and here it is called
var a = "hello"; // <- the declaration of the variable under the call
</script>
我得到了不同的結果:undefined world
。 JavaScript認識到它不知道a
可能是什麼,因此處理它爲undefined
。
當然數量的總和可能已經由一個字符串和不同的解釋,所以我還測試了這款:
<script type="text/javascript">
function b(){ // <- the actual function
a += 3;
alert(a);
}
b(); // <- and here it is called
var a = "hello"; // <- the declaration of the variable under the call
</script>
結果是:NaN
意Not a Number
。
這就是關於JS的懶惰和寬容。你的問題當然也可以解釋變量和功能的範圍。但爲此,已經有2個答案。當然,如果他們還不夠,我也可以在這裏編輯一個詳細的解釋。
他正在做的是他將變量移出函數的範圍。
這將使相同範圍內的其他方法可以訪問相同的變量。
看到這個問題,以瞭解更多有關變量的作用域:What is the scope of variables in JavaScript?
非常感謝。現在我正在閱讀你給我的鏈接,這對我非常有幫助。 – Muzammil 2011-04-10 15:30:15
這樣,它是一個全局變量,通過函數調用仍然存在的價值。 如果你把它放在函數內部,當函數被調用時它總是0
當函數被調用時,getValues不會「始終爲零」。它是一個全局變量,在函數被調用之前被賦值爲''(空字符串)。如果函數被調用,它將具有該函數賦予它的任何值。所以它只會有一個零值,如果這是它被分配上次調用函數的值。 – RobG 2011-04-10 12:58:54
我試圖解釋,如果*它在函數內*,那麼它將始終爲空,它將不會通過不同的調用保持其值,並且不能用於其他函數。 – AlfonsoML 2011-04-10 15:30:29
@RobG'code'var getValues =「」; function updateField(val){ getValues + = val; document.calc.putValues.value = getValues; } 以及我也可以分配變量,如'code'var getValues;是不是沒關係爲什麼我需要分配空 – Muzammil 2011-04-10 15:31:23
非常感謝你。我非常感謝你的幫助。再次感謝 – Muzammil 2011-04-10 15:26:12