From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../index.html" | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 "files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/\320\277\320\276\320\264\320\275\321\217\321\202\320\270\320\265/index.html" (limited to 'files/ru/словарь/поднятие/index.html') diff --git "a/files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/\320\277\320\276\320\264\320\275\321\217\321\202\320\270\320\265/index.html" "b/files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/\320\277\320\276\320\264\320\275\321\217\321\202\320\270\320\265/index.html" new file mode 100644 index 0000000000..ef0cdfb1be --- /dev/null +++ "b/files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/\320\277\320\276\320\264\320\275\321\217\321\202\320\270\320\265/index.html" @@ -0,0 +1,74 @@ +--- +title: Поднятие +slug: Словарь/Поднятие +translation_of: Glossary/Hoisting +--- +

Поднятие (hoisting) — термин, который вы не встретите в документации JavaScript. Поднятие задумывалось как общий способ мышления о том, как контекст исполнения (в частности, фазы создания и исполнения) работает в JavaScript. Однако, hoisting может привести и к недоразумениям. Например, hoisting учит, что объявление переменной или функции физически перемещается в начало вашего кода, хотя в действительности этого не происходит. На самом же деле, объявления переменных и функций попадают в память в процессе фазы компиляции, но остаются в коде на том месте, где вы их объявили.

+ +

Узнаем больше

+ +

Пример:

+ +

Одним из преимуществ помещения в память объявлений функций до выполнения кода то, что можно использовать функцию до ее объявления. Например:

+ +
function catName(name) {
+  console.log("Мою кошку зовут " + name);
+}
+
+catName("Тигр");
+/*
+Результатом будет вывод строки: "Мою кошку зовут Тигр"
+*/
+
+ +

Предыдущий пример демонстрирует ожидаемый рабочий код. Теперь давайте посмотрим, что происходит, когда мы вызываем функцию в коде до ее объявления:

+ +
catName("Раиса");
+
+function catName(name) {
+  console.log("Мою кошку зовут " + name);
+}
+/*
+Результатом будет вывод строки: "Мою кошку зовут Раиса"
+*/
+
+ +

Даже если мы вызываем функцию до ее объявления, код работает. Это происходит благодаря тому, как работает контекст выполнения в JavaScript.

+ +

 

+ +

Hoisting хорошо работает и с другими типами данных и переменными. Переменные могут быть инициализированы и использованы до их объявления. Однако, они не могут быть использованы без инициализации.

+ +

Пример:
+  

+ +
num = 6;
+num + 7;
+var num;
+/* не генерирует ошибку, так как num объявлен */
+
+
+ +

JavaScript "поднимает" только объявление, но не инициализацию. Если вы используете переменную, объявленную и проинициализированную после ее использования, то значение будет undefined. Два примера ниже демонстрируют это поведение.
+  

+ +
var x = 1; // Инициализируем x
+console.log(x + " " + y);  // '1 undefined'
+var y = 2;
+//код выше и код ниже одинаковые
+
+var x = 1; // Инициализируем x
+var y; // Объявляем y
+console.log(x + " " + y);  // '1 undefined'
+y = 2; // Инициализируем y
+
+ +

 

+ +

Technical reference

+ + -- cgit v1.2.3-54-g00ecf