2014-11-04 100 views
2

我遇到了一個奇怪的問題。在我的js文件,當我寫帶有參數的功能,其中之一是「文件名」帶有「 - 」的Javascript函數參數

function fileSize(id, file-name) { 
    // some code 
} 

這給了我一個錯誤,但是當我改變參數的名稱爲「FILE_NAME」,錯誤就不見了。

function fileSize(id, file_name) { 
    // some code 
} 

那麼爲什麼會發生這種情況?

回答

4

在JavaScript中,標識符名稱不能包含-,但允許使用_。引用自MDN

JavaScript標識符必須以字母,下劃線(_)或美元符號($)開頭;後續字符也可以是數字(0-9)。由於JavaScript區分大小寫,所以字母包括字符「A」到「Z」(大寫)以及字符「a」到「z」(小寫)。

從JavaScript 1.5開始,您可以在標識符中使用ISO 8859-1或Unicode字母,如å和ü。您還可以使用\ uXXXX Unicode轉義序列作爲標識符中的字符。

所以,只允許特殊字符爲_$

+0

你的結論並不全面;例如:函數x(ƒ){} – dandavis 2014-11-04 07:17:27

+0

@dandavis是的,這是正確的。那有什麼問題? – thefourtheye 2014-11-04 07:18:16

+0

@dandavis你的意思是unicode字符? – thefourtheye 2014-11-04 07:20:53

0

在javascript中,-令牌由減法運算符使用。因此,當分析器遇到:

file-name 

它會將其解釋爲兩個變量,filename,與namefile被減去。

由於這是一個表達式,並且表達式在參數聲明中無效,函數聲明本身變爲無效。

雖然我們可以設計這樣的語言的-符號並不意味着減去當參數聲明,我們不能在後面的代碼中使用的說法,因爲沒有辦法對語言file-namefile - name區分。其他語言可能有語法來處理這個問題,但JavaScript沒有(對於使用object["file-name"]語法的對象屬性而言,這種語法不適用於本地變量)。

這就是爲什麼javascript在變量和函數名稱中不允許使用-符號的原因。