Почему JavaScript поднимает переменные?
Что мотивировало конструкторы, когда они решили реализовать подъемные механизмы? Есть ли другие популярные языки, на которых это можно сделать?
Предоставьте соответствующие ссылки на документацию и / или записи.
javascript
hoisting
Кславдий
источник
источник
div
в jQueryОтветы:
Как объясняет Стоян Стефанов в книге «Шаблоны JavaScript», подъем является результатом реализации интерпретатора JavaScript.
Интерпретация JS-кода выполняется в два прохода. Во время первого прохода интерпретатор обрабатывает объявления переменных и функций.
Второй проход - это фактический этап выполнения кода. Интерпретатор обрабатывает функциональные выражения и необъявленные переменные.
Таким образом, мы можем использовать концепцию «подъема» для описания такого поведения.
источник
Создатель JS Брендан Эйх однажды сказал (в Твиттере) :
Он также объяснил, что ...
Есть ли другие популярные языки, на которых это можно сделать?
Я не знаю других популярных языков, которые поднимали бы переменные таким же образом.Я думаю, что даже ActionScript - еще одна реализация ECMAScript, используемая при разработке Flash - не поддерживает подъем. Это стало источником путаницы и разочарования для разработчиков, знакомых с другими языками и изучающих JavaScript.ОБНОВЛЕНИЕ: из комментариев Python имеет аналогичное поведение при подъеме переменных .
источник
Это связано с тем, что интерпретатор javascript интерпретирует код за два цикла.
В 1-м цикле все объявления переменных и функций переносятся в верхнюю часть области действия функции, в которой они выполняются. Это помогает в создании
variableObjects
дляexecution context
of функции еще до ее выполнения.На 2-м этапе присвоение значений, операторы кода и вызовы функций происходят построчно, как и ожидалось.
Вы можете прочитать немного подробнее здесь.
Это даст вам более полную картину вокруг поведения вокруг
let
,const
иclass
деклараций, также приоритете следует между переменными и функциями.источник