Рубрики
Без рубрики

Пространства имен в JavaScript

Что такое пространство имен? Расстановка имен – это действие, заключающее набор сущностей, переменных, функций, объектов в единый зонтичный термин. В JavaScript есть различные способы сделать это, и знакомство с примерами облегчит понимание концепции.

Что такое пространство имен?

Расстановка имен – это действие, заключающее набор сущностей, переменных, функций, объектов в единый зонтичный термин.

В JavaScript есть различные способы сделать это, и знакомство с примерами облегчит понимание концепции.

Самый простой способ создания пространства имен – это создание литерала объекта:

const car = {
  start: () => {
    console.log('start')
  },
  stop: () => {
    console.log('stop')
  }
}

Таким образом, start и stop находятся в пространстве имен car: car.start() и car.stop().

Они не засоряют глобальный объект.

Почему это важно? Одна из веских причин заключается в том, что ничто не может им помешать.

Этот способ работает также при присвоении переменной объекту после его создания:

const car = {}

car.start = () => {
  console.log('start')
}

car.stop = () => {
  console.log('stop')
}

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

Лучший способ полностью скрыть код от посторонних глаз – завернуть его в блок, который представляет собой часть кода, завернутую в фигурные скобки, как блок if или for, но также и независимый блок, сформированный подобно этому:

{
  const start = () => {
    console.log('start')
  }

  const stop = () => {
    console.log('stop')
  }
}

Эти две функции теперь недоступны за пределами блока.

Но вам нужно обратить внимание на то, чтобы всегда использовать let или const, которые являются блочными.

Использование var вместо них приведет к “утечке” за пределы блока.

Чтобы обойти это, вы можете использовать функции, что является “старым”, pre-let/const способом:

(function() {
  var start = () => {
    console.log('start')
  }

  const stop = () => {
    console.log('stop')
  }
})()

Теперь start и stop недоступны извне, даже если start присвоена переменной, определенной через var.

Оригинал: “https://flaviocopes.com/javascript-namespaces/”