Где выполняется JavaScript

Где выполняется 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 APIsDOM, 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 описывает язык; движок — конкретная реализация.

ДвижокГде встречается
V8Chrome, Edge, Node.js, Deno
SpiderMonkeyFirefox
JavaScriptCoreSafari, WebKit
HermesReact 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 помогают экспериментировать без пересборки проекта.

См. также #