Стандарт именования / форматирования глобальных переменных - PullRequest
24 голосов
/ 10 ноября 2010

Каков стандарт именования и форматирования глобальных переменных в JavaScript?

Например:

var global_var // ?
var _global_var // ?
var GLOBAL_VAR // ?
var _GLOBAL_VAR // ?
...

Примечание: я не говорю о константах, просто о переменных, которые имеют глобальную область видимости.

Ответы [ 5 ]

17 голосов
/ 10 ноября 2010

Стандартов как таковых нет. Наиболее распространенной практикой является использование нижнего регистра верблюда (например, var fooBarBaz;) для всех переменных и имен свойств, независимо от области видимости, но это ни в коем случае не является универсальным. Единственным исключением является использование заглавной буквы имени функции, которая предназначена для использования в качестве конструктора:

function SomeClass() {}

var someClassObj = new SomeClass();

Я также видел заглавные буквы и подчеркивания, используемые для переменных, которые автор считает постоянными, или, альтернативно, для всех глобальных переменных:

var EARTH_RADIUS = 6378100;

Другое довольно распространенное соглашение (хотя я сам его не использую) заключается в добавлении префикса к свойствам объектов, которые автор хочет считать закрытыми, с подчеркиванием:

this._leaveThisAlone = "Magical property";

Дуглас Крокфорд опубликовал свой собственный взгляд на стандарты кода JavaScript несколько лет назад, который охватывает большую часть этого, но, как всегда, это мнение только одного человека, так что возьмите с собой щепотку соли.

4 голосов
/ 10 ноября 2010

Необходимый комментарий о переосмыслении дизайна, если вам нужно использовать глобальные переменные, бла-бла ...

Глобальные переменные, которые я видел, обычно имеют префикс g или gbl.Иногда это изменяется с подчеркиванием: _g, _gbl.IIRC, подчеркивания использовались, когда «глобальный» ограничивался какой-то областью, а не «действительно» глобальным.

Если вы собираетесь использовать глобальную переменную таким образом, чтобы ВСЕ не могло использоватьпеременная, я бы пошел с использованием подчеркивания.В javascript (IIRC) соглашение об использовании подчеркивания в качестве префикса подразумевает, что переменная является «частной» или не должна использоваться внешне.Если вы, поочередно, объявляете это так, чтобы каждый мог иметь доступ и изменять, то я бы использовал только префикс и без подчеркивания.

0 голосов
/ 17 февраля 2019

Я думаю, что есть два способа сделать это.

Первая причина, по которой можно это сделать, - это возможность обнаружить глобальные переменные состояния, связанные с глобальным объектом (обычно оконным или глобальным) в данный момент времени. Проблема в том, что независимо от того, насколько вы строгие, есть только два практических подхода к этому; Во-первых, это создать глобальную переменную для отслеживания глобальных переменных по имени и обязаться всегда менять ее при добавлении / удалении глобальной, во-вторых, сохранить копию исходного состояния глобальной и определить, какие свойства были добавлены, удалены, или изменилось с начала.

Вторая причина сделать это состоит в том, чтобы подчеркнуть в коде, что он намеренно взаимодействует с глобальным состоянием. В этом случае нет никакого стандартного, небольшого преимущества в том, чтобы добавлять комментарии или явно указывать глобальный объект, а не делать это неявным образом.

Существует большое наказание за несогласованность обозначений в коде, если вы решили изменить способ обозначения константы между файлами или проектами. Существует множество нотаций на выбор, и все они терпят неудачу, так или иначе, либо запутывая имя переменной и ее естественный алфавитный порядок, либо добавляя дополнительные накладные расходы на ссылки.

Лично, если я сомневаюсь, мне нравится придерживаться стиля кодирования Ядро Linux , я считаю, что он достаточно решает многие проблемы.

C - это спартанский язык, и ваше имя должно быть таким же. В отличие от Модула-2 и программисты на Паскале, программисты на С не используют такие милые имена, как ThisVariableIsATemporaryCounter. Программист C назвал бы это переменная tmp, которую гораздо проще написать, и не в последнюю очередь трудно понять.

ОДНАКО, хотя смешанные имена не одобряются, описательные имена для глобальных переменных обязательно. Для вызова глобальной функции foo является стрельба преступление.

ГЛОБАЛЬНЫЕ переменные (которые будут использоваться, только если они действительно вам нужны) должны имеют описательные имена, как и глобальные функции. Если у вас есть функция который считает количество активных пользователей, вы должны назвать это count_active_users () или аналогичный, вы не должны называть его cntusr ().

Кодирование типа функции в имени (так называемый венгерский нотации) поврежден мозг - компилятор знает типы в любом случае и может проверить это, и это только смущает программиста. Неудивительно MicroSoft делает глючные программы.

ЛОКАЛЬНЫЕ имена переменных должны быть короткими и точными. Если у вас есть некоторый случайный счетчик целочисленных циклов, он, вероятно, должен называться i. Называть это loop_counter непродуктивно, если нет шансов на это быть неправильно понятым. Точно так же tmp может быть практически любого типа переменная, используемая для хранения временного значения.

Если вы боитесь смешивать имена локальных переменных, у вас есть Еще одна проблема, которая называется функция-рост-гормон-дисбаланс синдром. См. Главу 6 (Функции).

0 голосов
/ 02 сентября 2015

Одна из серьезных причин, по которой люди советуют вам не использовать глобальные переменные, - это избегать вмешательства в другие скрипты и / или библиотеки.

Соглашение, которое я начал использовать, когда мне нужно использовать глобальную переменную, - это добавить своифамилия - таким образом я знаю, что не буду вмешиваться в глобальные переменные каких-либо библиотек или внешних скриптов.(Хотя у меня довольно уникальная фамилия - это может не сработать, если вы Смит).

Таким образом, мои глобальные переменные будут называться:

var foo_lastnameGlobal;
var bar_lastnameGlobal;

Я должен отметить (в случае, если это не ясно), это просто личное соглашение, а не распространенное или широко используемое.,Это также помогает мне вспомнить, каковы мои глобальные переменные, когда я их использую.Я полагаю, что это может быть не очень хорошо для публичного кода или профессиональной рабочей среды.

0 голосов
/ 06 ноября 2013

Если вы хотите, чтобы employeeID был глобальной переменной, то правильный метод - объявить как window.employeeID = 5; а затем используйте window.employeeID во всех местах, к которым вы будете обращаться позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...