Пишу скрипт на нативном JS, где нужные данные появляются в функции некоторого уровня вложенности, но должны быть доступными из любого уровня вложенности. Среди моих познаний JS только один вариант реализации — хранить в localStorage. То есть я помещаю данные в localStorage:
localStorage.setItem(‘answer’, JSON.stringify(answer));
а потом забираю их оттуда:
localStorage.getItem(«answer»);
Говорят, localStorage синхронный, то есть останавливающий работу остальных скриптов пока сам выполняется. Наверняка есть ещё какие-то подводные камни. Мне даже не нужно хранить данные сессии; я их даже вынужденно удаляю при загрузке страницы.
Более того меня не покидает чувство, что решение хранить промежуточные данные через localStorage — не изящное, и есть куда более профессиональное. Есть возможность создать какое-то хранилище (массив, объект или ещё что-то), куда можно и записать, и считать данные, не использую localStorage? Например, данные появляются на 10-ом уровне вложенности, но доступны из любого места приложения? ПС. Мне кажется, что решение прям очень простое, из азов JS, я прав?
JavaScript #1: что это такое, с чего начать, как внедрять и запускать
Источник: ru.stackoverflow.com
JavaScript учебник
Начало работы с JavaScript
JavaScript (не путать с Java ) — это динамический, слабо типизированный язык, используемый для клиентской стороны, а также для серверных скриптов.
День благодарения: .
Please enable JavaScript
JavaScript — это язык с учетом регистра. Это означает, что язык считает, что заглавные буквы отличаются от их нижестоящих копий. Ключевые слова в JavaScript — это строчные буквы.
JavaScript — это стандартная реализация стандарта ECMAScript.
Темы этого тега часто ссылаются на использование JavaScript в браузере, если не указано иное. Только файлы JavaScript не могут запускаться непосредственно браузером; необходимо встроить их в HTML-документ. Если у вас есть код JavaScript, который вы хотите попробовать, вы можете вставить его в некоторый контент-заполнитель, подобный этому, и сохранить результат как example.html :
Test page Inline script (option 1): // YOUR CODE HERE External script (option 2):
Версии
1 | 1997-06-01 |
2 | 1998-06-01 |
3 | 1998-12-01 |
E4X | 2004-06-01 |
5 | 2009-12-01 |
5,1 | 2011-06-01 |
6 | 2015-06-01 |
7 | 2016-06-14 |
8 | 2017-06-27 |
Использование API DOM
DOM означает D ocument O bject M odel. Это объектно-ориентированное представление структурированных документов, таких как XML и HTML .
Проект на JavaScript Приложение список задач ToDo
Установка свойства textContent Element — один из способов вывода текста на веб-страницу.
Например, рассмотрим следующий тег HTML:
Чтобы изменить свойство textContent , мы можем запустить следующий JavaScript:
document.getElementById(«paragraph»).textContent = «Hello, World»;
Это выберет элемент, который с paragraph id и настроит его текстовое содержимое на «Hello, World»:
Вы также можете использовать JavaScript для создания нового элемента HTML программно. Например, рассмотрим документ HTML со следующим телом:
Adding an element
В нашем JavaScript мы создаем новый
с свойством textContent и добавляем его в конец тела html:
var element = document.createElement(‘p’); element.textContent = «Hello, World»; document.body.appendChild(element); //add the newly created element to the DOM
Это изменит ваше тело HTML на следующее:
Adding an element
Hello, World
Обратите внимание, что для управления элементами в DOM с использованием JavaScript код JavaScript должен запускаться после создания соответствующего документа в документе. Это может быть достигнуто путем размещения тегов JavaScript после всего вашего другого содержимого . Кроме того, вы можете также использовать прослушиватель событий для прослушивания, например. window onload , добавление вашего кода в этот прослушиватель событий задержит запуск вашего кода до тех пор, пока не будет загружен весь контент на вашей странице.
Третий способ убедиться, что все ваши DOM загружены, заключается в том, чтобы обернуть код манипуляции DOM с помощью функции тайм-аута 0 мс . Таким образом, этот код JavaScript переупорядочивается в конце очереди выполнения, что дает браузеру возможность закончить выполнение некоторых не-JavaScript-вещей, которые ждали завершения, прежде чем приступать к этой новой части JavaScript.
Использование console.log ()
Вступление
Все современные веб-браузеры, NodeJs, а также почти все другие среды JavaScript поддерживают запись сообщений на консоль с использованием набора методов ведения журнала. Наиболее распространенным из этих методов является console.log() .
В среде браузера функция console.log() используется преимущественно для целей отладки.
Начиная
Откройте консоль JavaScript в своем браузере, введите следующую команду и нажмите Enter :
console.log(«Hello, World!»);
Это запустит на консоль следующее:
В приведенном выше примере функция console.log() печатает Hello, World! на консоль и возвращает undefined (показано выше в окне вывода консоли). Это связано с тем, что console.log() не имеет явного возвращаемого значения .
Регистрирующие переменные
console.log() может использоваться для записи переменных любого типа; не только строки. Просто передайте переменную, которую вы хотите отобразить в консоли, например:
var foo = «bar»; console.log(foo);
Это запустит на консоль следующее:
Если вы хотите регистрировать два или более значения, просто разделите их запятыми. Пространства будут автоматически добавляться между каждым аргументом во время конкатенации:
var thisVar = ‘first value’; var thatVar = ‘second value’; console.log(«thisVar:», thisVar, «and thatVar:», thatVar);
Это запустит на консоль следующее:
Заполнители
Вы можете использовать console.log() в сочетании с заполнителями:
var greet = «Hello», who = «World»; console.log(«%s, %s!», greet, who);
Это запустит на консоль следующее:
Объекты регистрации
Ниже мы видим результат регистрации объекта. Это часто полезно для регистрации ответов JSON от вызовов API.
console.log(< ‘Email’: », ‘Groups’: <>, ‘Id’: 33, ‘IsHiddenInUI’: false, ‘IsSiteAdmin’: false, ‘LoginName’: ‘i:0#.w|virtualdomain\user2’, ‘PrincipalType’: 1, ‘Title’: ‘user2’ >);
Это запустит на консоль следующее:
Запись элементов HTML
У вас есть возможность регистрировать любой элемент, который существует в DOM . В этом случае мы регистрируем элемент body:
console.log(document.body);
Это запустит на консоль следующее:
Конечная нота
Дополнительные сведения о возможностях консоли см. В разделе « Консоль» .
Использование window.alert ()
Метод alert отображает окно визуального предупреждения на экране. Параметр метода оповещения отображается пользователю простым текстом:
window.alert(message);
Поскольку window является глобальным объектом, вы можете вызвать также следующую сокращенную форму:
alert(message);
Так что делает window.alert() ? Итак, давайте рассмотрим следующий пример:
alert(‘hello, world’);
В Chrome это создаст всплывающее окно:
Заметки
Метод alert технически является свойством объекта window , но поскольку все свойства window автоматически являются глобальными переменными, мы можем использовать alert как глобальную переменную вместо свойства window — это означает, что вы можете напрямую использовать alert() вместо window.alert() .
В отличие от использования console.log , alert действует как модальное приглашение, означающее, что alert вызове кода приостанавливается до тех пор, пока на запрос не будет дан ответ. Традиционно это означает, что никакой другой код JavaScript не будет выполняться до тех пор, пока предупреждение не будет уволено:
alert(‘Pause!’); console.log(‘Alert was dismissed’);
Однако спецификация фактически позволяет другому коду, инициируемому событиями, продолжать выполнение, даже если модальный диалог все еще отображается. В таких реализациях возможен запуск другого кода, пока отображается модальный диалог.
Более подробную информацию об использовании метода alert можно найти в теме подсказок модалов .
Использование предупреждений обычно обескураживается в пользу других методов, которые не блокируют взаимодействие пользователей со страницей, чтобы создать лучший пользовательский интерфейс. Тем не менее, это может быть полезно для отладки.
Использование window.prompt ()
Простым способом получения ввода от пользователя является метод prompt() .
Синтаксис
prompt(text, [default]);
- text : текст отображается в поле подсказки.
- default : Значение по умолчанию для поля ввода (необязательно).
Примеры
var age = prompt(«How old are you?»); console.log(age); // Prints the value inserted by the user
Если пользователь нажимает кнопку « ОК» , возвращается входное значение. В противном случае метод возвращает null .
Возвращаемое значение prompt всегда является строкой, если пользователь не нажимает кнопку « Отмена» , в которой в этом случае он возвращает значение « null . Safari является исключением, когда пользователь нажимает кнопку «Отмена», функция возвращает пустую строку. Оттуда вы можете преобразовать возвращаемое значение в другой тип, например целое число .
Заметки
- Пока отображается окно приглашения, пользователю не разрешается обращаться к другим частям страницы, так как диалоговые окна являются модальными окнами.
- Начиная с Chrome 46.0 этот метод блокируется внутри если его атрибут sandbox не имеет значения allow-modal.
Использование DOM API (с графическим текстом: Canvas, SVG или файл изображения)
Использование элементов холста
HTML предоставляет элемент холста для создания растровых изображений.
Сначала создайте холст для хранения информации пикселя изображения.
var canvas = document.createElement(‘canvas’); canvas.width = 500; canvas.height = 250;
Затем выберите контекст для холста, в данном случае двумерный:
var ctx = canvas.getContext(‘2d’);
Затем установите свойства, связанные с текстом:
ctx.font = ’30px Cursive’; ctx.fillText(«Hello world!», 50, 50);
Затем вставьте элемент canvas в страницу, чтобы вступить в силу:
document.body.appendChild(canvas);
Использование SVG
SVG предназначен для построения масштабируемой векторной графики и может использоваться в HTML.
Сначала создайте контейнер SVG-элемента с размерами:
var svg = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘svg’); svg.width = 500; svg.height = 50;
Затем создайте text элемент с желаемыми характеристиками позиционирования и шрифта:
var text = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘text’); text.setAttribute(‘x’, ‘0’); text.setAttribute(‘y’, ’50’); text.style.fontFamily = ‘Times New Roman’; text.style.fontSize = ’50’;
Затем добавьте фактический текст для отображения в text элемент:
text.textContent = ‘Hello world!’;
Наконец добавьте text элемент в наш svg контейнер и добавьте элемент контейнера svg в документ HTML:
svg.appendChild(text); document.body.appendChild(svg);
Файл изображения
Если у вас уже есть файл изображения, содержащий нужный текст и помещенный на сервер, вы можете добавить URL-адрес изображения, а затем добавить изображение в документ следующим образом:
var img = new Image(); img.src = ‘https://i.ytimg.com/vi/zecueq-mo4M/maxresdefault.jpg’; document.body.appendChild(img);
Использование window.confirm ()
Метод window.confirm() отображает модальное диалоговое окно с необязательным сообщением и двумя кнопками: «ОК» и «Отмена».
Теперь давайте рассмотрим следующий пример:
result = window.confirm(message);
Здесь сообщение является необязательной строкой, отображаемой в диалоговом окне, и результатом является логическое значение, указывающее, было ли выбрано значение «ОК» или «Отмена» (true означает «ОК»).
window.confirm() обычно используется для запроса подтверждения пользователя перед тем, как совершить опасную операцию, например, удалить что-то в панели управления:
if(window.confirm(«Are you sure you want to delete this?»))
Результат этого кода будет выглядеть в браузере:
Если вам это нужно для последующего использования, вы можете просто сохранить результат взаимодействия пользователя с переменной:
var deleteConfirm = window.confirm(«Are you sure you want to delete this?»);
Заметки
- Аргумент является необязательным и не требуется спецификацией.
- Диалоговые окна — это модальные окна — они не позволяют пользователю получить доступ к остальной части интерфейса программы, пока диалоговое окно не будет закрыто. По этой причине вам не следует злоупотреблять какой-либо функцией, которая создает диалоговое окно (или модальное окно). И независимо от того, есть очень веские причины, чтобы избежать использования диалоговых окон для подтверждения.
- Начиная с Chrome 46.0 этот метод блокируется внутри если его атрибут sandbox не имеет значения allow-modal.
- Обычно принято называть метод подтверждения с удалением окна, поскольку объект окна всегда неявный. Тем не менее, рекомендуется явно определять объект окна, поскольку ожидаемое поведение может измениться из-за реализации на более низком уровне уровня с помощью так называемых методов.
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow
- Начало работы с JavaScript
- .postMessage () и MessageEvent
- AJAX
- API веб-криптографии
- API вибрации
- API выбора
- API состояния батареи
- API уведомлений
- Callbacks
- execCommand и contenteditable
- IndexedDB
- JSON
- Linters — Обеспечение качества кода
- Loops
- requestAnimationFrame
- Timestamps
- Transpiling
- WeakMap
- WeakSet
- WebSockets
- Автоматическая точка с запятой — ASI
- Анти-паттерны
- Арифметика (математика)
- Асинхронные итераторы
- Асинхронные функции (async / await)
- Атрибуты данных
- Веб-хранилище
- Встроенные константы
- Генераторы
- геолокации
- Глобальная обработка ошибок в браузерах
- Дата
- Двоичные данные
- Единичное тестирование Javascript
- Задавать
- Зарезервированные ключевые слова
- Интервалы и тайм-ауты
- Использование javascript для получения / установки пользовательских переменных CSS
- история
- Как заставить итератор использоваться внутри функции асинхронного обратного вызова
- карта
- Классы
- Комментарии
- Контекст (это)
- Литералы шаблонов
- локализация
- Манипуляция данными
- Массивы
- Методы модуляции
- Модалы — подсказки
- Модули
- Назначение деструктуризации
- наследование
- обещания
- Обнаружение браузера
- Обработка ошибок
- Объект Navigator
- Объекты
- Объем
- Объявления и задания
- Операции сравнения
- Оптимизация звонков
- отладка
- Оценка JavaScript
- Переменное принуждение / преобразование
- Переменные JavaScript
- Перечисления
- Печенье
- Побитовые операторы
- Побитовые операторы — примеры реального мира (фрагменты)
- Поведенческие шаблоны проектирования
- полномочие
- получать
- Пользовательские элементы
- Последовательности выхода
- Приставка
- Проблемы с безопасностью
- Пространства имен
- Прототипы, объекты
- Рабочие
- Регулярные выражения
- Свободный API
- Сети и Getters
- Символы
- События
- События, отправленные сервером
- Советы по повышению производительности
- Создание шаблонов проектирования
- Спецификация (модель объекта браузера)
- Сравнение даты
- Строгий режим
- Струны
- Та же политика происхождения и перекрестная связь
- Тильда ~
- Типы данных в Javascript
- Унарные операторы
- условия
- Файловый API, Blobs и FileReaders
- функции
- Функции конструктора
- Функции стрелки
- Функциональный JavaScript
- Цепочка метода
- Цикл событий
- экран
- Эффективность памяти
Источник: learntutorials.net
Контекст выполнения и стек вызовов в JavaScript
Если вы — JavaScript-разработчик или хотите им стать, это значит, что вам нужно разбираться во внутренних механизмах выполнения JS-кода. В частности, понимание того, что такое контекст выполнения и стек вызовов, совершенно необходимо для освоения других концепций JavaScript, таких, как поднятие переменных, области видимости, замыкания. Материал, перевод которого мы сегодня публикуем, посвящён контексту выполнения и стеку вызовов в JavaScript.
Контекст выполнения
Контекст выполнения (execution context) — это, если говорить упрощённо, концепция, описывающая окружение, в котором производится выполнение кода на JavaScript. Код всегда выполняется внутри некоего контекста.
▍Типы контекстов выполнения
В JavaScript существует три типа контекстов выполнения:
- Глобальный контекст выполнения. Это базовый, используемый по умолчанию контекст выполнения. Если некий код находится не внутри какой-нибудь функции, значит этот код принадлежит глобальному контексту. Глобальный контекст характеризуется наличием глобального объекта, которым, в случае с браузером, является объект window , и тем, что ключевое слово this указывает на этот глобальный объект. В программе может быть лишь один глобальный контекст.
- Контекст выполнения функции. Каждый раз, когда вызывается функция, для неё создаётся новый контекст. Каждая функция имеет собственный контекст выполнения. В программе может одновременно присутствовать множество контекстов выполнения функций. При создании нового контекста выполнения функции он проходит через определённую последовательность шагов, о которой мы поговорим ниже.
- Контекст выполнения функции eval . Код, выполняемый внутри функции eval , также имеет собственный контекст выполнения. Однако функцией eval пользуются очень редко, поэтому здесь мы об этом контексте выполнения говорить не будем.
Стек выполнения
Стек выполнения (execution stack), который ещё называют стеком вызовов (call stack), это LIFO-стек, который используется для хранения контекстов выполнения, создаваемых в ходе работы кода.
Когда JS-движок начинает обрабатывать скрипт, движок создаёт глобальный контекст выполнения и помещает его в текущий стек. При обнаружении команды вызова функции движок создаёт новый контекст выполнения для этой функции и помещает его в верхнюю часть стека.
Движок выполняет функцию, контекст выполнения которой находится в верхней части стека. Когда работа функции завершается, её контекст извлекается из стека и управление передаётся тому контексту, который находится в предыдущем элементе стека.
Изучим эту идею с помощью следующего примера:
let a = ‘Hello World!’; function first() < console.log(‘Inside first function’); second(); console.log(‘Again inside first function’); >function second() < console.log(‘Inside second function’); >first(); console.log(‘Inside Global Execution Context’);
Вот как будет меняться стек вызовов при выполнении этого кода.
Состояние стека вызовов
Когда вышеприведённый код загружается в браузер, JavaScript-движок создаёт глобальный контекст выполнения и помещает его в текущий стек вызовов. При выполнении вызова функции first() движок создаёт для этой функции новый контекст и помещает его в верхнюю часть стека.
При вызове функции second() из функции first() для этой функции создаётся новый контекст выполнения и так же помещается в стек. После того, как функция second() завершает работу, её контекст извлекается из стека и управление передаётся контексту выполнения, находящемуся в стеке под ним, то есть, контексту функции first() .
Когда функция first() завершает работу, её контекст извлекается из стека и управление передаётся глобальному контексту. После того, как весь код оказывается выполненным, движок извлекает глобальный контекст выполнения из текущего стека.
О создании контекстов и о выполнении кода
До сих пор мы говорили о том, как JS-движок управляет контекстами выполнения. Теперь поговорим о том, как контексты выполнения создаются, и о том, что с ними происходит после создания. В частности, речь идёт о стадии создания контекста выполнения и о стадии выполнения кода.
▍Стадия создания контекста выполнения
Перед выполнением JavaScript-кода создаётся контекст выполнения. В процессе его создания выполняются три действия:
- Определяется значение this и осуществляется привязка this (this binding).
- Создаётся компонент LexicalEnvironment (лексическое окружение).
- Создаётся компонент VariableEnvironment (окружение переменных).
ExecutionContext = < ThisBinding = , LexicalEnvironment = < . >, VariableEnvironment = < . >, >
Привязка this
В глобальном контексте выполнения this содержит ссылку на глобальный объект (как уже было сказано, в браузере это объект window ).
В контексте выполнения функции значение this зависит от того, как именно была вызвана функция. Если она вызвана в виде метода объекта, тогда значение this привязано к этому объекту. В других случаях this привязывается к глобальному объекту или устанавливается в undefined (в строгом режиме). Рассмотрим пример:
let foo = < baz: function() < console.log(this); >> foo.baz(); // ‘this’ указывает на объект ‘foo’, так как функция ‘baz’ была вызвана // как метод объекта ‘foo’ let bar = foo.baz; bar(); // ‘this’ указывает на глобальный объект window, так как при вызове функции // ссылка на объект не используется
Лексическое окружение
В соответствии со спецификацией ES6, лексическое окружение (Lexical Environment) — это термин, который используется для определения связи между идентификаторами и отдельными переменными и функциями на основе структуры лексической вложенности ECMAScript-кода. Лексическое окружение состоит из записи окружения (Environment Record) и ссылки на внешнее лексическое окружение, которая может принимать значение null .
Проще говоря, лексическое окружение — это структура, которая хранит сведения о соответствии идентификаторов и переменных. Под «идентификатором» здесь понимается имя переменной или функции, а под «переменной» — ссылка на конкретный объект (в том числе — на функцию) или примитивное значение.
В лексическом окружении имеется два компонента:
- Запись окружения. Это место, где хранятся объявления переменных и функций.
- Ссылка на внешнее окружение. Наличие такой ссылки говорит о том, что у лексического окружения есть доступ к родительскому лексическому окружению (области видимости).
- Глобальное окружение (или глобальный контекст выполнения) — это лексическое окружение, у которого нет внешнего окружения. Ссылка глобального окружения на внешнее окружение представлена значением null . В глобальном окружении (в записи окружения) доступны встроенные сущности языка (такие, как Object , Array , и так далее), которые связаны с глобальным объектом, там же находятся и глобальные переменные, определённые пользователем. Значение this в этом окружении указывает на глобальный объект.
- Окружение функции, в котором, в записи окружения, хранятся переменные, объявленные пользователем. Ссылка на внешнее окружение может указывать как на глобальный объект, так и на внешнюю по отношении к рассматриваемой функции функцию.
- Декларативная запись окружения, которая хранит переменные, функции и параметры.
- Объектная запись окружения, которая используется для хранения сведений о переменных и функциях в глобальном контексте.
Обратите внимание на то, что в окружении функции декларативная запись окружения, кроме того, содержит объект arguments , который хранит соответствия между индексами и значениями аргументов, переданных функции, и сведения о количестве таких аргументов.
Лексическое окружение можно представить в виде следующего псевдокода:
GlobalExectionContext = < LexicalEnvironment: < EnvironmentRecord: < Type: «Object», // Данные о привязках для идентификаторов >outer: > > FunctionExectionContext = < LexicalEnvironment: < EnvironmentRecord: < Type: «Declarative», // Данные о привязках для идентификаторов >outer: > >
Окружение переменных
Окружение переменных (Variable Environment) — это тоже лексическое окружение, запись окружения которого хранит привязки, созданные посредством команд объявления переменных ( VariableStatement ) в текущем контексте выполнения.
Так как окружение переменных также является лексическим окружением, оно обладает всеми вышеописанными свойствами лексического окружения.
В ES6 существует одно различие между компонентами LexicalEnvironment и VariableEnvironment . Оно заключается в том, что первое используется для хранения объявлений функций и переменных, объявленных с помощью ключевых слов let и const , а второе — только для хранения привязок переменных, объявленных с использованием ключевого слова var .
Рассмотрим примеры, иллюстрирующие то, что мы только что обсудили:
let a = 20; const b = 30; var c; function multiply(e, f) < var g = 20; return e * f * g; >c = multiply(20, 30);
Схематичное представление контекста выполнения для этого кода будет выглядеть так:
GlobalExectionContext = < ThisBinding: , LexicalEnvironment: < EnvironmentRecord: < Type: «Object», // Данные о привязках для идентификаторов a: < uninitialized >, b: < uninitialized >, multiply: < func >> outer: >, VariableEnvironment: < EnvironmentRecord: < Type: «Object», // Данные о привязках для идентификаторов c: undefined, >outer: > > FunctionExectionContext = < ThisBinding: , LexicalEnvironment: < EnvironmentRecord: < Type: «Declarative», // Данные о привязках для идентификаторов Arguments: , >, outer: >, VariableEnvironment: < EnvironmentRecord: < Type: «Declarative», // Данные о привязках для идентификаторов g: undefined >, outer: > >
Как вы, вероятно, заметили, переменные и константы, объявленные с помощью ключевых слов let и const , не имеют связанных с ними значений, а переменным, объявленным с помощью ключевого слова var , назначено значение undefined .
Это так из-за того, что во время создания контекста в коде осуществляется поиск объявлений переменных и функций, при этом объявления функций целиком хранятся в окружении. Значения переменных, при использовании var , устанавливаются в undefined , а при использовании let или const остаются неинициализированными.
Именно поэтому можно получить доступ к переменным, объявленным с помощью var , до их объявления (хотя они и будут иметь значение undefined ), но, при попытке доступа к переменным или константам, объявленным с помощью let и const , выполняемой до их объявления, возникает ошибка.
Только что мы только что описали, называется «поднятием переменных» (Hoisting). Объявления переменных «поднимаются» в верхнюю часть их лексической области видимости до выполнения операций присвоения им каких-либо значений.
▍Стадия выполнения кода
Это, пожалуй, самая простая часть данного материала. На этой стадии выполняется присвоение значений переменным и осуществляется выполнение кода.
Обратите внимание на то, что если в процессе выполнения кода JS-движок не сможет найти в месте объявления значение переменной, объявленной с помощью ключевого слова let , он присвоит этой переменной значение undefined .
Итоги
Только что мы обсудили внутренние механизмы выполнения JavaScript-кода. Хотя для того, чтобы быть очень хорошим JS-разработчиком, знать всё это и не обязательно, если у вас имеется некоторое понимание вышеописанных концепций, это поможет вам лучше и глубже разобраться с другими механизмами языка, с такими, как поднятие переменных, области видимости, замыкания.
Уважаемые читатели! Как вы думаете, о чём ещё, помимо контекста выполнения и стека вызовов, полезно знать JavaScript-разработчикам?
- Блог компании RUVDS.com
- Разработка веб-сайтов
- JavaScript
Источник: habr.com