почему javascript разрешает $ для имени функции? - PullRequest
0 голосов
/ 19 марта 2011

Я начинаю любить jQuery, но как разработчик PHP я ненавижу использовать это

$().stuff

как все знают $ в PHP помечает переменные. Я предполагаю, что jQuery в javascript объявляет такую ​​функцию

function $(element) {/*stuff*/}

Разрешает ли javascripts $ в качестве имени функции? Это хорошее поведение?

Я знал, что только стандарт [0-9a-zA-Z_] может быть именем funcs / vars.

Я что-то упустил?

Спасибо

Ответы [ 5 ]

7 голосов
/ 19 марта 2011

Использование $ в PHP было ошибкой, которую также сделал изобретатель Perl.Префиксы переменных являются избыточными в полноценном компьютерном языке, потому что такие идентификаторы, как foo и bar, можно считать переменными без квалификации - что еще будет идентифицировать идентификатор?:-) Проблема в том, что любители, которые изобрели эти языки, были очень хорошо знакомы с оболочкой Unix, и они, очевидно, не осознавали, что $, который идет перед ссылками на переменные оболочки, такие как $PATH, не является прекрасной функцией языка, но ужасная необходимость, вызванная тем фактом, что в сценарии оболочки слова могут обычно отображаться «как сами по себе», например, когда вы говорите:

$ echo PATH
PATH
$ echo $PATH
/usr/local/bin:/usr/bin:/bin

Другими словами, экранирующий символ, такой как $это говорит, что «это переменная!» необходимо в языке подстановки текста , таком как оболочка, и экранирование также важно в таких вещах, как TCL и, конечно, в современных языках шаблонов, где вы должны бытьспособен различать весь обычный текст, который должен быть скопирован на веб-страницу, кроме ссылок на переменные и циклов, извлекающих динамическую информацию.

Но обычные языки программирования не работаютподстановка текста, поэтому $ в Perl и PHP - бесполезно и шумно.

С$ не имеет никакого другого использования в JavaScript, это было простое эстетическое суждение о том, делать ли его доступным в качестве «обычной буквы» для переменных.JavaScript сказал «да», Python сказал «нет», и я привык к обоим вариантам.Я думаю, теперь это «похоже на JavaScript» для меня $, чтобы быть действительным!

Но в нет случае, если вы позволите своему эстетическому суждению здесь быть информированным ужасным выбором Perlи PHP, которые были неправильным выбором!Вместо этого спросите себя, достаточно ли $ выглядит как заглавная S, чтобы вы могли считать его «достаточно близким к букве», или он всегда выглядит как символ для вас.Это настоящий выбор.

4 голосов
/ 19 марта 2011

Из документов MDC :

Идентификатор JavaScript должен начинаться с буквы, подчеркивания (_) или знака доллара ($);последующие символы также могут быть цифрами (0-9).Поскольку JavaScript чувствителен к регистру, буквы включают символы от «A» до «Z» (верхний регистр) и символы от «a» до «z» (нижний регистр).что в Javascript функции являются первоклассными.Это означает, что они являются объектами, как и все остальное.Имя, которое вы используете для ссылки на функцию , фактически является переменной.

Так, например, вы можете сделать это:

var myFunc = function() { /* some code */ };

и затем вызватьфункция как myFunc().

Поскольку $ является допустимым символом в именах идентификаторов, это действительное имя для функции точно так же, как и переменная, содержащая что-либо еще.Считается, что использование $ в качестве sigil для каждой переменной в PHP неоправданно.

4 голосов
/ 19 марта 2011

Да, это действительно. Крокфорд ненавидит это , другие любят это. Если вам это не нравится, не используйте '$', используйте 'jQuery'. Вы даже можете перевести jQuery в без конфликта , чтобы $ никогда не устанавливалось. Тем не менее, если вы пишете достаточно JS через PHP, чтобы это вызывало у вас проблемы, вам, вероятно, следует подумать, как научиться писать более качественный, более общий JS.

3 голосов
/ 19 марта 2011

Javascript позволяет использовать имена функций больше, чем просто az.$ является допустимым именем для функции, а $ не имеет специального значения, как в php.Так что $ - правильное имя для функции.

2 голосов
/ 19 марта 2011

Вы можете сделать

var whatever = $.noConflict();

, теперь вы можете использовать whatever(..) вместо $(...)

документации на http://api.jquery.com/jQuery.noConflict/


и цитировании Значения, переменные и литералы

Идентификатор JavaScript должен начинаться с буквы, подчеркивания (_) или знака доллара ($);последующие символы также могут быть цифрами (0-9).

...