我遇到了一個奇怪的問題。在我的js文件,當我寫帶有參數的功能,其中之一是「文件名」帶有「 - 」的Javascript函數參數
function fileSize(id, file-name) {
// some code
}
這給了我一個錯誤,但是當我改變參數的名稱爲「FILE_NAME」,錯誤就不見了。
function fileSize(id, file_name) {
// some code
}
那麼爲什麼會發生這種情況?
我遇到了一個奇怪的問題。在我的js文件,當我寫帶有參數的功能,其中之一是「文件名」帶有「 - 」的Javascript函數參數
function fileSize(id, file-name) {
// some code
}
這給了我一個錯誤,但是當我改變參數的名稱爲「FILE_NAME」,錯誤就不見了。
function fileSize(id, file_name) {
// some code
}
那麼爲什麼會發生這種情況?
在JavaScript中,標識符名稱不能包含-
,但允許使用_
。引用自MDN,
JavaScript標識符必須以字母,下劃線(_)或美元符號($)開頭;後續字符也可以是數字(0-9)。由於JavaScript區分大小寫,所以字母包括字符「A」到「Z」(大寫)以及字符「a」到「z」(小寫)。
從JavaScript 1.5開始,您可以在標識符中使用ISO 8859-1或Unicode字母,如å和ü。您還可以使用\ uXXXX Unicode轉義序列作爲標識符中的字符。
所以,只允許特殊字符爲_
和$
。
在javascript中,-
令牌由減法運算符使用。因此,當分析器遇到:
file-name
它會將其解釋爲兩個變量,file
和name
,與name
從file
被減去。
由於這是一個表達式,並且表達式在參數聲明中無效,函數聲明本身變爲無效。
雖然我們可以設計這樣的語言的-
符號並不意味着減去當參數聲明,我們不能在後面的代碼中使用的說法,因爲沒有辦法對語言file-name
和file - name
區分。其他語言可能有語法來處理這個問題,但JavaScript沒有(對於使用object["file-name"]
語法的對象屬性而言,這種語法不適用於本地變量)。
這就是爲什麼javascript在變量和函數名稱中不允許使用-
符號的原因。
你的結論並不全面;例如:函數x(ƒ){} – dandavis 2014-11-04 07:17:27
@dandavis是的,這是正確的。那有什麼問題? – thefourtheye 2014-11-04 07:18:16
@dandavis你的意思是unicode字符? – thefourtheye 2014-11-04 07:20:53