Используя `var` или нет
Вы должны ввести любую переменную с var
оператором, иначе она попадет в глобальную область видимости.
Стоит отметить, что в строгом mode ( "use strict";
) присваиваются необъявленные переменныеReferenceError
.
В настоящее время JavaScript не имеет блочной области видимости. Школа Крокфорда учит вас помещать операторы var в начало тела функции , а в Руководстве по стилю Dojo говорится, что все переменные должны быть объявлены в наименьшей возможной области видимости . ( let
Утверждение и определение, введенные в JavaScript 1.7, не являются частью стандарта ECMAScript.)
Хорошей практикой является привязка свойств регулярно используемых объектов к локальным переменным, поскольку это быстрее, чем поиск всей цепочки областей видимости. (См. Оптимизация JavaScript для максимальной производительности и низкого потребления памяти .)
Определение вещей в файле или в `(function () {...}) ()`
Если вам не нужно выходить за пределы вашего кода, вы можете заключить весь код в выражение функции - это называется шаблоном модуля. Он имеет преимущества в производительности, а также позволяет минимизировать и скрыть ваш код на высоком уровне. Вы также можете убедиться, что он не будет загрязнять глобальное пространство имен. Функции переноса в JavaScript также позволяют добавлять аспектно-ориентированное поведение. У Бена Черри есть глубокая статья по шаблону модуля .
Используя `это` или нет
Если вы используете псевдоклассическое наследование в JavaScript, вы вряд ли сможете избежать его использования this
. Это вопрос вкуса, какой тип наследования вы используете. В других случаях просмотрите статью Питера Мишо о виджетах JavaScript без «этого» .
Использование `function myname ()` или `myname = function ();`
function myname()
является объявлением функции и myname = function();
является выражением функции, назначенным переменной myname
. Последняя форма указывает, что функции являются объектами первого класса, и вы можете делать с ними все, что угодно, как с переменной. Единственное различие между ними состоит в том, что все объявления функций поднимаются в верхнюю часть области, что может иметь значение в некоторых случаях. В противном случае они равны. function foo()
это сокращенная форма. Более подробную информацию о подъеме можно найти в статье JavaScript Scoping and Hoisting .
Определение методов в теле объекта или использование «прототипа»
Тебе решать. JavaScript имеет четыре шаблона создания объектов: псевдоклассический, прототипный, функциональный и частичный ( Crockford, 2008 ). У каждого есть свои плюсы и минусы, посмотрите Крокфорда в его видео-выступлениях или получите книгу «Хорошие детали», как уже предлагал Анон .
Каркасы
Я предлагаю вам выбрать некоторые фреймворки JavaScript, изучить их соглашения и стиль и найти те практики и шаблоны, которые лучше всего вам подходят. Например, Dojo Toolkit предоставляет надежную среду для написания объектно-ориентированного кода JavaScript, который даже поддерживает множественное наследование.
Узоры
Наконец, есть блог, посвященный изучению общих шаблонов JavaScript и анти-шаблонов . Также проверьте вопрос Существуют ли какие-либо стандарты кодирования для JavaScript? в переполнении стека.