Автор оригинала: Joshua Azemoh.
Подъемное подъемное поведение в JavaScript, где переменные декларации перемещаются в верхнюю часть области, в которой она объявляется. То есть верхняя часть текущей функции или верхней части глобальной области. Это то, что позволяет ссылаться переменные JavaScript, прежде чем они будут объявлены.
Это то, что происходит, когда объявляется переменной:
var aVariable = 48;
Декларация перемещается на вершину текущего объема и инициализированной в точке, где он был первоначально заявлен.
// Top of scope var aVariable; ... // Original position declared aVariable = 48;
Вы можете увидеть это, когда вы пытаетесь ссылаться на переменную, которая не определена – вы получите ссылочную ошибку ( FairError
). Однако, когда вы ссылаетесь на переменную, которая позже определена, вы получаете undefined
Отказ
console.log(notDefined); // Logs: Uncaught ReferenceError: notDefined is not defined(…) console.log(definedLater); // Logs: undefined var definedLater = 70; console.log(definedLater) // Logs: 70
Подъемные функции
Существует два основных способа создания функций в JavaScript: в качестве декларации функции и в качестве экспрессии функции.
// Function Declaration function sayHi() { alert('Hi!'); } // Function Expression var sayHello = function () { alert('Hello!'); };
Они похожи, и вы можете назвать их точно так же. Разница заключается в том, когда вы можете сделать это. Декларация функции может быть вызвана до и после того, как она определена, но экспрессия функции может быть вызвана только после определения. Это также из-за подъема.
Также как объявление переменной, выражения функций поднимаются в верхней части текущей области и не инициализируются до тех пор, как они были первоначально объявлены. Это где декларация функции отличается.
Весь декларация функции поднимается в верхней части объема, что позволяет использовать функцию в любое время.
Функциональная декларация
sayHi(); function sayHi() { alert('Hi!'); } // Displays alert box with message "Hi!"
Функция выражения
sayHello(); var sayHello = function () { alert('Hello!'); }; // Uncaught TypeError: sayHello is not a function(…)
ES6 Примечание
В ES6 (Ecmascript 2015), объявляя переменную с Пусть
или Const
будет поднимать переменную в верхней части объема. Тем не менее, пытаясь использовать переменную, прежде чем она объявлена, дает Собственный ресурс
Отказ
Заключение
Как видно, подъемная подъемная особенность в JavaScript, и есть случаи, когда это может быть полезно, но большую часть времени лучше всего объявлять переменные, прежде чем пытаться их использовать.
Этот пост был первоначально размещен автором на его Сайт Отказ Эта версия была отредактирована для ясности и может появиться отличаться от исходного поста.