Есть ли цель поднять переменные? - PullRequest
0 голосов
/ 18 октября 2018

В последнее время я много изучал Javascript и пытался понять значение (если оно есть) переменных поднятия.

Я понимаю (сейчас), что JS - это два проходасистема, она компилируется и затем выполняется.Кроме того, я понимаю, что ключевое слово var «существует» в лексической области, в которой оно было объявлено, и поэтому оно «неопределено», если оно вызывается до того, как ему присвоено значение механизмом.

Вопрос в том, почему это вообще имеет значение?Какая польза от подъема переменных, которые вы не можете сделать без подъема?Я чувствую, что он просто создает менее читаемый код без выгоды ...

Есть ли пример (-ы), где полезно использовать переменные?

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

«Подъем» необходим для взаимно рекурсивных функций (и всего остального, где циклически используются ссылки на переменные):

function even(n) { return n == 0 || !odd(n-1); }
function odd(n) { return !even(n-1); }

Без «подъема» функция odd не будет находиться в области видимости.для функции even.Языки, которые его не поддерживают, требуют предварительных объявлений , которые не вписываются в структуру языка JavaScripts.

Ситуации, которые требуют их, могут возникать чаще, чем вы думаете:

const a = {
    start(button) {
        …
        button.onclick = e => {
            …
            b.start(button);
        };
    }
};
const b = {
    start(button) {
        …
        button.onclick = e => {
            …
            a.start(button);
        };
    }
};
0 голосов
/ 18 октября 2018

Нет такой вещи, как подъем.Подъем - это просто побочный эффект фазы компиляции, которая возникает, и тот факт, что Javascript имеет лексическую область видимости.Когда компилятор приходит к фазе компиляции, он помещает все объявления переменных и функций в память, поскольку он вычисляет лексические области действия, которые существуют в программе.Но нет hoisting функции или ключевого слова или модуля.На самом деле он даже не упоминался в спецификации Ecmascript до выхода es2015.

В конце концов, подъем - это одно из тех слов на миллион долларов, которые мы все используем, часто потому, что его проще использовать, чем объяснять и обсуждать процесс компиляции, который проходит javascript.

Я бы посоветовал вам либо прочитать спецификации Ecmascript, либо поработать над источником движка javascript, таким как v8, либо почитать работу Кайла Симпсона.Он написал большую серию под названием «Не знаю, JS».

Надеюсь, это поможет!

Подъем - это термин, который вы не найдете в какой-либо нормативной спецификации, предшествующей спецификации языка ECMAScript® 2015.Подъем был задуман как общий способ размышления о том, как контексты выполнения (особенно фазы создания и выполнения) работают в JavaScript.Тем не менее, концепция может сначала немного запутать.Концептуально, например, строгое определение подъема предполагает, что объявления переменных и функций физически перемещаются в начало вашего кода, но на самом деле это не так.Вместо этого объявления переменных и функций помещаются в память на этапе компиляции, но остаются именно там, где вы ввели их в свой код. <- Из документации Mozilla </p>

https://developer.mozilla.org/en-US/docs/Glossary/Hoisting

0 голосов
/ 18 октября 2018

Не совсем.Единственное, что я могу придумать, где это было бы полезно, - это если вы спешите писать код и случайно объявите об этом позже.Так что это на самом деле не имеет значения, это странное дополнение к JS, о котором многие люди даже не подозревают, потому что его использование кажется отсталым и неэффективным.

...