2014-11-04 5 views
2

Я столкнулся со странной проблемой. В моем файле JS, когда я написал функцию с аргументами и один из них был «имя-файла»Javascript аргументы функции с "-"

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

Это дало мне ошибку, но когда я изменил имя аргумента в «имя_файла», исчезла ошибка.

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, такие как å и ü в идентификаторах. Вы также можете использовать escape-последовательности Unixode \ uXXXX как символы в идентификаторах.

Таким образом, допускаются только специальные символы: _ и $.

+0

Ваше заключение не является исчерпывающим; ex: function x (ƒ) {} – dandavis

+0

@ dandavis Да, это правильно. Что не так с этим? – thefourtheye

+0

@dandavis Вы имеете в виду символы Юникода? – thefourtheye

0

В javascript токен - используется оператором вычитания. Поэтому, когда парсер встречает:

file-name 

интерпретирует это как две переменные, file и name, с name быть вычтена из file.

Поскольку это выражение и выражения недействительны в объявлении аргумента, само объявление функции становится недействительным.

В то время как мы можем спроектировать язык такого, что - символа не означает, вычитать, когда в объявлениях аргументов мы не можем использовать аргумент позже в коде, потому что нет никакого способа для языка различать file-name и file - name. Другие языки могут иметь синтаксис, чтобы иметь дело с этим, но javascript этого не делает (это похоже на свойства объекта с использованием синтаксиса object["file-name"], но не для локальных переменных).

Именно поэтому javascript запрещает символ - в именах переменных и функций.