Підйом у Javascript === Компіляція?


9

Я натрапив на цікаву точку зору на недавньому співбесіді з роботою.

Підвищення в Javascript - це переміщення оголошень змінної та декларації функцій у верхній частині сценарію. Чи можемо ми назвати цю фазу компіляцією ?

Мені відомо про той факт, що інтерпретатор Javascript має 2 проходи над вхідним сценарієм, де в першому проході він робить підйом, а в другому проході він фактично виконує сценарій. Знаючи, що Javascript - інтерпретована мова, це питання мене трохи заплутало.

Відповіді:


18

Ні. Підйомне обладнання - це не компіляція.

Хостинг - це концепція, яка була створена розробниками для пояснення того, що відбувається під час компіляції, коли змінні та декларації функцій переміщуються до вершини, що містить область їх застосування.

Компіляція - це те, що відбувається, коли ваш код Javascript перетворюється на якесь інше представлення (як правило, якийсь виконуваний код), яке слід виконати або зараз, або пізніше. Двигун JavaScript Javascript V8 насправді має два компілятори; один для створення швидкого та брудного виконуваного коду зараз, інший для створення оптимізованого коду пізніше.

Мови програмування не визначаються як "складені" або "інтерпретовані" мови. Швидше, мови інтерпретуються або складаються за потребою.

Подальше читання
Підйом у Javascript
Як працює двигун V8


1
Стаття Вікіпедії про інтерпретовані мови також є корисною для розрізнення "інтерпретований" проти "складеного": en.wikipedia.org/wiki/Interpreted_language

Якщо я правильно це розумію, Hoisting не перетворює скрипт в машиночитаний код, тому це не компіляція . Чи правий я? :)
Рахул Дезай

Прочитайте ще раз другий абзац моєї відповіді.
Роберт Харві

1
У моїй недавній розмові з цим інтерв'ю на цю тему він дав мені посилання на курс Advanced JS на FrontendMasters.com, де Кайл Сімпсон пояснює, що це компіляція, в тому сенсі, що якщо ми порівняємо це, наприклад, з сценарієм Баша, не знав би, чого очікувати на лінії №4, поки вона перебуває на лінії №3. Однак у випадку компілятора JS він побачив, що знаходиться на лінії №4 раніше під час підйому. Це лише те, що він не перетворюється у двійковий код на відміну від інших мов. Javascript компілюється щоразу, коли він запускається.
Рахул Дезай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.