Где выполняется JavaScript #
JavaScript выполняется в среде (runtime), которая предоставляет движок языка и набор встроенных API. Один и тот же синтаксис ES работает в разных местах, но доступные объекты — window, document, fs, fetch — зависят от среды, а не от самого языка.
Браузер #
В браузере JavaScript управляет страницей: реагирует на клики, меняет DOM, отправляет запросы, хранит данные в localStorage.
const button = document.querySelector('#notify')
button.addEventListener('click', () => {
button.textContent = 'Отправлено'
})
Браузерная среда включает:
| Часть | Роль |
|---|---|
| Движок JS | Парсит и выполняет код (V8 в Chrome, SpiderMonkey в Firefox) |
| Web APIs | DOM, fetch, таймеры, localStorage — реализует браузер, не ECMAScript |
| Event loop | Очередь задач: колбэки, промисы, события ввода |
Скрипт в <script> или модуль type="module" выполняется в контексте вкладки. Код из одного origin не видит переменные другого сайта — это изоляция, а не ограничение языка.
Node.js #
Node.js — среда вне браузера на базе движка V8. Подходит для серверов, CLI, сборки фронтенда, скриптов автоматизации.
import { readFile } from 'node:fs/promises'
const raw = await readFile('orders.json', 'utf8')
const orders = JSON.parse(raw)
console.log(`Заказов: ${orders.length}`)
В Node нет window и document, зато есть модули node:fs, node:http, node:path. Файловая система и сеть доступны напрямую — типичный сценарий для API и утилит.
Node и браузер делят синтаксис ES, но глобальные объекты различаются. Код с document.querySelector в Node не запустится без эмуляции DOM (например, в тестах).
Консоль разработчика #
Консоль DevTools — быстрый способ проверить выражение, объект или фрагмент логики без правки файлов проекта.
// ввод в консоли на странице
const items = [{ sku: 'kb-01', qty: 2 }]
items.reduce((sum, i) => sum + i.qty, 0) // 2
Консоль выполняет код в контексте открытой страницы: доступны те же глобальные объекты, что у скриптов сайта. Удобно отлаживать селекторы, смотреть сетевые ответы и ловить ошибки до деплоя.
В Node аналог — интерактивный REPL: команда node без аргументов или флаг -i после выполнения файла.
Движки JavaScript #
Движок — программа, которая компилирует и исполняет JavaScript. Спецификация ECMAScript описывает язык; движок — конкретная реализация.
| Движок | Где встречается |
|---|---|
| V8 | Chrome, Edge, Node.js, Deno |
| SpiderMonkey | Firefox |
| JavaScriptCore | Safari, WebKit |
| Hermes | React Native (мобильные приложения) |
Движки следуют одному стандарту ES, но могут отличаться скоростью оптимизаций и моментом поддержки новых возможностей. На практике это редко мешает обычному коду; чаще проблемы дают браузерные API (старые версии Safari, полифиллы).
Как выбрать среду #
- Интерактив на странице, UI, формы — браузер.
- API, файлы, cron, CLI — Node.js или Deno/Bun (альтернативные runtimes на V8).
- Быстрая проверка идеи — консоль или REPL.
Один язык — разные «окружения» с разным набором библиотек. Разделы про сетевые запросы и хранение в браузере относятся к Web APIs; в Node те же идеи реализуются другими модулями.
Итог #
- JavaScript — язык; браузер, Node и консоль — среды с разными API.
- В браузере JS работает с DOM и Web APIs через event loop.
- Node.js использует V8 для серверного и системного кода без DOM.
- Движки (V8, SpiderMonkey, JavaScriptCore) реализуют ECMAScript в конкретных продуктах.
- Консоль и REPL помогают экспериментировать без пересборки проекта.