Переменные
Именование (naming)
Переменная должна отвечать на вопрос "Кто?, Что?". Use camelCase. Именовать константы нужно загл авными буквами, разделяя слова "_".
Нельзя именовать переменные, начиная с цифры, использовать для разделения слов "-", использовать ключевые слова.
Правильно
let thisIsSomeString = 'This is some string';
let $some = 'With $ symbol';
const THIS_IS_SOME_CONST = 'This is some const';
Неправильно
let 123some;
let class;
var 1score;
var %Score;
var №score;
var &score;
var score-score;
var privet;
Ключевые слова (keywords)
// ES-2015
break case class catch const continue debugger default
delete do elseexport extends finally for function if
import in instanceof let new return super switch this
throw try typeof var void while with yield
// for future
enum await implements package protected static interface
private public
// old keywords
abstract boolean byte char double final float goto int
long native short synchronized transient volatile
Регист
Регист имеет значения. Все переменные в примере будут разными.
let something;
let Something;
let SomeThing;
let SOMETHING;
var
- Используется уже редко (ES5), как и объявление глобальных переменных в принципе
- Область видимости - функция, если переменная объявлена внутри функции
- Область видимости - глобальная, если переменная объявлена "наверху". Запись прямо в window
- Можно изменять значение
- Можно переобъявлять
// объявление переменной c присвоением
var a = 123; // window.a; // 123
// объявление нескольких переменных с присвоением
var a = 123,
b = 'abc',
c = true;
// объявление нескольких неопределенных переменных без присвоения
// undefined (без данных)
var a, b, c;
var scope
- Если var объявлена на самом верху (вне функций), то доступ к ней есть отовсюду
- Если var объявлена внутри функции, то доступ к ней будет на любом уровне ниже объявления, "сверху" - будет ошибка!
- Если var объявлена даже например внутри if, то доступ к этой переменной будет глобальный, даже "сверху" (всплытие объявления переменных)
// внутри {}
if (true) {
// глобальное объявление внутри {} - есть только у var
var VAR = 123;
console.log(VAR); // 123 - доступ есть
if (true) {
console.log(VAR); // 123 - доступ есть
}
}
// обращение "сверху"
console.log(VAR); // 123 - доступ есть
// внутри function
function something() {
// локальная объявление внутри функции
var VAR = 123;
console.log(VAR); // 123 - доступ есть
if (true) {
console.log(VAR); // 123 - доступ есть
}
}
// обращение "сверху"
console.log(VAR); // Ошибка! ReferenceError: VAR is not defined
let
- ES6
- Можно изменять значение
- Нельзя переобъявлять
- Область видимости - глобальная, если объявлена наверху
- Область видимости - , если объявлена внутри
let a = true;
a = false;
// Uncaught SyntaxError: Identifier 'a' has already been declared
let a = 123; // будет ошибка
let scope
- Если let объявлена на самом верху (вне функций), то доступ к ней есть отовсюду
- Если let объявлена внутри функции или внутри , то доступ к ней будет на любом уровне ниже объявления
- Если let объявлена внутри функции или внутри , а обращение к ней идет "сверху" - будет ошибка!
// внутри {}
if (true) {
let LET = 123;
console.log(LET); // 123 - доступ есть
if (true) {
console.log(LET); // 123 - доступ есть
}
}
// обращение "сверху"
console.log(LET); // Ошибка! ReferenceError: LET is not defined
// внутри function
function something() {
let LET = 123;
console.log(LET); // 123
if (true) {
console.log(LET); // 123
}
}
// обращение "сверху"
console.log(LET); // Ошибка! ReferenceError: LET is not defined
const
- ES6, самое широкое применение
- Нельзя изменять значение (для объектов и массивов можно)
- Нельзя переобъявлять
- Область видимости - глобальная, если объявлена наверху
- Область видимости - , если объявлена внутри
const a = true;
// Uncaught TypeError: Assignment to constant variable
a = false; // будет ошибка
// Uncaught SyntaxError: Identifier 'a' has already been declared
const a = 123; // будет ошибка
const person = {
name: 'John',
age: 18,
};
// будет ошибка
const person = {
name: 'Jack',
age: 19,
};
// Ошибки не будет
person.name = 'Jack';
Object.freeze(car); // запрещает изменять свойства в объекте
const scope
- Если const объявлена на самом верху (вне функций), то доступ к ней есть отовсюду
- Если const объявлена внутри функции или вну три , то доступ к ней будет на любом уровне ниже объявления
- Если const объявлена внутри функции или внутри , а обращение к ней идет "сверху" - будет ошибка!
// внутри {}
if (true) {
const CONST = 123;
console.log(CONST); // 123
if (true) {
console.log(CONST); // 123
}
}
// обращение "сверху"
console.log(CONST); // Ошибка! ReferenceError: CONST is not defined
// внутри function
function something() {
const CONST = 123;
console.log(CONST); // 123
}
// обращение "сверху"
console.log(CONST); // Ошибка! ReferenceError: CONST is not defined
Глобальные переменные
- Переменные, объявленные вне функций
- Доступ к ним есть отовсюду
const a = 5; // global scope
Можно даже не объявлять (не записывать ключевое слово и будет работать)
a = 5; // global scope
console.log(a); // 5