Структура кода и строгий режим в JavaScript #
Программа на JavaScript состоит из инструкций (statements), которые движок выполняет сверху вниз. Понятная структура кода снижает число скрытых ошибок; режим "use strict" отключает опасные устаревшие послабления языка.
Инструкции и блоки #
Инструкция — законченное действие: объявление, присваивание, вызов, условие, цикл.
const queueSize = 3
const label = 'intake'
console.log(label, queueSize)
Блок { ... } группирует инструкции. У let / const внутри блока своя область видимости:
{
const step = 'validate'
// step виден только здесь
}
// console.log(step) // ReferenceError
Блоки используют в if, циклах, try/catch и просто для ограничения области переменных.
Точки с запятой #
JavaScript умеет вставлять ; автоматически (ASI — Automatic Semicolon Insertion), но правила неочевидны. Безопасная практика для учебного и продакшен-кода — ставить ; явно или использовать единый стиль линтера.
Классическая ловушка без точки с запятой:
const createRankBroken = () => {
return
{
level: 1
}
}
// функция вернёт undefined: return «закрылся» до объекта
Правильно:
const createRank = () => {
return {
level: 1,
}
}
Ещё один риск — строка, начинающаяся с [ или ( сразу после выражения без ;.
Комментарии #
// однострочный: зачем сделано решение, а не «что очевидно из кода»
/*
многострочный:
контракт функции, ограничения входных данных
*/
/**
* Считает среднее по баллам спринта.
* Пустой массив → null.
*/
function averageScore(values) {
if (values.length === 0) return null
const sum = values.reduce((acc, n) => acc + n, 0)
return sum / values.length
}
Комментарии дополняют имена переменных, а не дублируют их: i++ // увеличить i — шум.
Строгий режим: "use strict"
#
Строгий режим запрещает часть неявного поведения ES5 и раньше. В ES-модулях и в классах strict включается автоматически. В обычных скриптах добавьте директиву первой строкой файла или функции:
'use strict'
function registerUser(login) {
// accidentalGlobal = login // ReferenceError в strict
const safeLogin = login.trim()
return safeLogin
}
Что меняется на практике:
| Без strict (упрощённо) | Со strict |
|---|---|
| Присвоение несуществующей переменной создаёт глобал | ReferenceError |
delete у обычной переменной молча «не срабатывает» | ошибка |
| Дубликаты имён параметров допустимы | запрещены |
this у вызова функции без объекта → глобальный объект | this === undefined |
'use strict'
function readContext() {
return this
}
readContext() // undefined, а не window/globalThis
Для нового кода ориентируйтесь на модули (type="module" / import/export) — strict уже «встроен».
Именование и читаемость #
- Имена отражают смысл:
retryCount, неx2. - Однотипный стиль:
camelCaseдля переменных и функций. - Функции — глаголы (
fetchFeed), булевы флаги — предикаты (isReady,hasToken).
const maxRetries = 3
let attempt = 0
function canRetry(attempt, maxRetries) {
return attempt < maxRetries
}
Итог #
- Код — последовательность инструкций и блоков с локальной видимостью.
- Явные
;и дисциплина ASI убирают редкие, но дорогие баги. "use strict"(или модули) ловит случайные глобалы и странныйthis.- Комментарии объясняют намерение; имена объясняют данные.