2011-04-10 111 views
1

我一直在尋找網絡上的計算器代碼,並且發現了類似下面的代碼。爲什麼變量在Javascript中的函數之前聲明

但我在腦海裏有一個問題。爲什麼程序員在創建函數之前聲明變量?

var getValues= ""; 

function updateField(val) { 
    getValues += val; 
    document.calc.putValues.value = getValues; 
} 

請親切地幫我回答我的問題。

謝謝大家。

回答

1

你知道,變量實際上可以在函數中聲明。但是它必須在使用之前聲明,意味着在函數被調用之前。

我創建了一個測試場景來展示我的意思。

我創建了一個名爲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> 

結果是:NaNNot a Number

這就是關於JS的懶惰和寬容。你的問題當然也可以解釋變量和功能的範圍。但爲此,已經有2個答案。當然,如果他們還不夠,我也可以在這裏編輯一個詳細的解釋。

+0

非常感謝你。我非常感謝你的幫助。再次感謝 – Muzammil 2011-04-10 15:26:12

2

他正在做的是他將變量移出函數的範圍。

這將使相同範圍內的其他方法可以訪問相同的變量。

看到這個問題,以瞭解更多有關變量的作用域:What is the scope of variables in JavaScript?

+0

非常感謝。現在我正在閱讀你給我的鏈接,這對我非常有幫助。 – Muzammil 2011-04-10 15:30:15

3

這樣,它是一個全局變量,通過函數調用仍然存在的價值。 如果你把它放在函數內部,當函數被調用時它總是0

+1

當函數被調用時,getValues不會「始終爲零」。它是一個全局變量,在函數被調用之前被賦值爲''(空字符串)。如果函數被調用,它將具有該函數賦予它的任何值。所以它只會有一個零值,如果這是它被分配上次調用函數的值。 – RobG 2011-04-10 12:58:54

+0

我試圖解釋,如果*它在函數內*,那麼它將始終爲空,它將不會通過不同的調用保持其值,並且不能用於其他函數。 – AlfonsoML 2011-04-10 15:30:29

+0

@RobG'code'var getValues =「」; function updateField(val){ getValues + = val; document.calc.putValues.value = getValues; } 以及我也可以分配變量,如'code'var getValues;是不是沒關係爲什麼我需要分配空 – Muzammil 2011-04-10 15:31:23

相關問題