Контейнеры данных JavaScript

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

JavaScript предоставляет несколько различных способов хранения данных и управления имипеременные и константы — это контейнеры, на которые можно ссылаться по произвольному имени и которые можно доступны и изменены на протяжении всей программы.

Константы

Константы — это контейнеры, в которых хранятся неизменяемые данные (нельзя изменить) — используйте ключевое слово const. Код ниже объявляет константу theAnswer:

const theAnswer = 42

Обновление констант вызовет ошибку:

const theAnswer = 42 
theAnswer = 12  // Uncaught TypeError: invalid assignment to const 'theAnswer'

Переменные

Переменные — это контейнеры, в которых хранятся данные, которые можно изменить во время выполнения программы (mutable) — используйте ключевое слово let:

let colour = 'blue' 
console.log(colour)  // prints: blue 
colour = 'red' 
console.log(colour)  // prints: red

«Устаревшие» переменные

Ключевое слово var также можно использовать для объявления переменной в JavaScript — на самом деле это был «оригинальный» и единственный способ сделать это некоторое время:

var colour = 'blue'

Использование var не рекомендуется из-за непредсказуемого побочного эффекта — читайте дальше…

let vs var

Для объявления переменных можно использовать ключевые слова var и let. Основное различие между ними заключается в области действия переменной: var – это область действия функции, тогда как let – это блокировка. ограничено.

Если вы объявляете переменную с помощью var внутри функции, она будет доступна в любом месте внутри этой функции, но если вы объявляете переменную с помощью let внутри блока, она будет доступна только внутри этого блока.

пусть охват

Вот пример, иллюстрирующий разницу:

function sayHello() { 
  if(true) { 
    let name = "John" 
  }
  console.log(`Hello ${name}`)
} 

sayHello()  // prints: Hello

Вывод ниже будет «Hello», поскольку переменная name не будет существовать вне блока if.

Вот еще один:

function sayHello() { 
  let name = "John" 
  console.log(`Hello ${name}`)
  if(true) { 
    let name = "Paul" 
    console.log(`Hi ${name}`)
  } 
  console.log(`Hello again ${name}`)
} 

sayHello()

Мы объявляем переменную name внутри функции и присваиваем ей значение John. Затем мы объявляем другую переменную с тем же именем, name, внутри блока if и присваиваем ей значение Paul. Вывод будет:

"Hello John" 
"Hi Paul" 
"Hello again John"

Обратите внимание, что третье сообщение включает значение первой переменной name.

переменная область видимости

Вот тот же фрагмент кода, но с использованием var s:

function sayHello() { 
  var name = "John" 
  console.log(`Hello ${name}`)
  if(true) { 
    var name = "Paul" 
    console.log(`Hi ${name}`) 
  } 
  console.log(`Hello again ${name}`) 
} 

sayHello()

Вывод будет немного другим — обратите внимание, что 3-е сообщение включает Paul, а не John:

"Hello John" 
"Hi Paul" 
"Hello again Paul"

На самом деле приведенный выше фрагмент кода создает только одну переменную name. Второе объявление игнорируется, и содержимое name будет изменено на Paul.

NB: Такое поведение можно предотвратить, если использовать режим strictподробнее о строгом режиме читайте здесь.

Первоначально опубликовано на https://www.90-10.dev 9 января 2023 г.