Переменные (Variable) в ECMAScript (ES6)

1- Что такое Переменная (Variable)?

Одна переменная (variable) это "расположение памяти" (Memory location) которая используется программой для хранения значений. Название переменной называется идентификатором (identifier).
Название переменной должно следовать по правилу, ниже являются правила названия переменной:
  1. Название переменной не должно совпадать с ключевыми словами (keyword).
  2. Название переменной может содержать буквы (alphabets) или цифры, но не начинается с цифр.
  3. Название переменной не должно содержать пробелы (white space), или специальные знаки, кроме нижней черты (underscore) (_) и знака доллара ($).

2- Объявить переменную

Объявление переменной является нужным, так как вам нужно это сделать перед тем как использовать ее. Синтаксис  ES5 использует ключевое слово  var для объявления переменной. ES6 добавляет 2 новых ключевых слова это  let & const чтобы объявить переменную.
// Declare variables:
var a1;
console.log(a1); // undefined

var a2 = 100;
console.log(a2); // 100


var a3, a4;
var a5, a6 = 200;

console.log(a5); // undefined
console.log(a6); // 200

var a7= 100, a8 = 300;


let b1;
console.log(b1); // undefined

let b2 = "Hello";
console.log(b2); // Hello



const c = 100;
console.log(c); // 100

 

block

Блок (block) является набором команд расположенных в "фигурных скобках" (Curly brackets) { }.

let

Ключевое слово  let используется для объявления переменной с диапазоном блока (block scope), это значит данная переменная будет распознаваться программой в том блоке или в подблоках, но не распознается программой вне блока, который определил его.
if(true) {

   let a = 200;

   console.log(a); // 200
}    

// Program will ignore this statement:
console.log(a);
Если вы используете ключевое слово let чтобы определить 2 переменные с одинаковыми названиями, одна переменная объявляется в родительском блоке, другая переменная определяется в подблоке, программа будет их считать 2-мя разными переменными.
let i = 1000;
let j = 2000;

if(true)  {

   i = 100; // Assign new value to 'i'
   let j = 200; // A new variable (***)
   console.log("Test1: " + i + " : " + j); // Test1: 100 : 200

}

console.log("Test2: "+ i + " : " + j); // Test2: 100 : 2000

var

Ключевое слово  var используется для объявления переменной, данная переменная имеет диапазон (scope) шире по сравнению с переменной  let. Она распознается программой внутри блока, который определил ее, в подблоках, даже распознается вне блока, который определил ее.
if(true) {

   var a = 200;

   console.log(a); // 200
}    

console.log(a); // 200
Если вы объявляете 2 переменные с одинаковыми названиями с ключевым словом  var, одна переменная объявлена в родительском блоке, другая переменная в подблоке, программа будет считать эти 2 переменные одинаковыми (Одно расположение в памяти).
var i = 1000;
var j = 2000;

if(true)  {

   i = 100; // Assign new value
   var j = 200; // Assign new value
   console.log("Test1: " + i + " : " + j); // Test1: 100 : 200

}

console.log("Test2: "+ i + " : " + j); // Test2: 100 : 200
Переменные объявленные с ключевым словом  var в одной функции будут распознаваться программой в той функции, она не будет распознаваться вне функции.
// A function
var test = function()  {
    var a = 200;

    console.log(a); // 200
}

// Call function.
test();

console.log(a); // Not work!!

const

Ключевое слово  const используется для объявления константы (constant). При объявлении константы вам нужно всегда прикрепить к ней значение. Но вы не можете прикрепить новое значение для данной переменной. Примечание: Как и переменная  let, переменная  const имеет диапазон блока (block scope).
// Declare a constant with a value

const greeting = "Hello";

// Assign new value to 'greeting'
greeting = "Hi"; // ==> Error!!


// Declare a constant without a value
const i  ; // ==> Error!!
Переменная может быть объявлена с ключевым словом  const, она будет константой в определении вы не сможете ей прикрепить значение, но она не является неизменной (imutable), вы все так же можете изменить ее  property (свойства).
Смотрите пример ниже, переменная объявлена с ключевым словом  const, ее значение это объект со многими  property (свойствами). Вы можете прикрепить новое значение property (свойствам) данного объекта.
// Declaring a constant is an object
const person = {
    name: "Clinton",
    gender : "Female"  
};

console.log(person.name); // Clinton

// Can assign new values to properties of const object.
person.name = "Trump";
person.gender = "Male";

console.log(person.name); // Trump


// ** Error! (Cannot assign new value to const variable).
person =  {
   name : "Trump";
}

+ const: Object.freeze()

Метод Object.freeze() зафиксировать (freeze) объект, вы не сможете поменять или прикрепить новое значение для своих  property (свойств).
Object.freeze()
// Declaring a constant is an object
const person = {
    name: "Clinton",
    gender : "Female"   
};

console.log(person.name); // Clinton

Object.freeze(person); // Freeze object 'person'.

person.name = "Trump";

console.log(person.name); // Clinton