Чому JavaScript піднімає змінні?
Що було обґрунтуванням дизайнерів, коли вони вирішили здійснити підйом? Чи існують інші популярні мови, які цим займаються?
Будь ласка, надайте відповідні посилання на документацію та / або записи.
Чому JavaScript піднімає змінні?
Що було обґрунтуванням дизайнерів, коли вони вирішили здійснити підйом? Чи існують інші популярні мови, які цим займаються?
Будь ласка, надайте відповідні посилання на документацію та / або записи.
div
в jQuery
Відповіді:
Як пояснює Стоян Стефанов у книзі "Шаблони JavaScript", піднімання є результатом реалізації інтерпретатора JavaScript.
Інтерпретація коду JS виконана за два проходи. Під час першого проходження інтерпретатор обробляє оголошення змінних та функцій.
Другий прохід - це фактичний крок виконання коду. Інтерпретатор обробляє вирази функцій та незадекларовані змінні.
Таким чином, ми можемо використовувати поняття "підняття" для опису такої поведінки.
"Таким чином, підняття змінних вар є [ненавмисним наслідком підняття функції, відсутність сфери блоку, [та] JS як оперативна робота 1995 року".
"функція піднімання дозволяє розкласти програму зверху вниз," дозвольте rec "безкоштовно, зателефонуйте перед оголошенням; var піднімання позначено."
Я не знаю жодної іншої популярної мови, яка піднімає змінні таким же чином. Я думаю, навіть ActionScript - ще одна реалізація ECMAScript, що використовується у розробці Flash - не реалізувала підняття. Це спричинило плутанину та розчарування для розробників, знайомих з іншими мовами, які вивчають JavaScript.
ОНОВЛЕННЯ: З коментарів, Python має подібну поведінку піднімання змінних .
Це тому, що інтерпретатор javascript інтерпретує код за два цикли.
У 1 - му циклі всі оголошення змінних і функції приймаються у верхній частині області видимості функції він виконується. Це допомагає в створенні variableObjects
для execution context
функції ще до того, це виконання.
На другому етапі присвоєння значень, оператори коду та виклики функцій виконуються по черзі за очікуваним чином.
Ви тут трохи детальніше прочитали .
Це дасть вам більш повну картину навколо поведінки навколо let
, const
і class
декларацій, також пріоритеті слід між змінними і функціями.