Hoisting в JavaScript

Hoisting - это defaultManager JavaScript, который поднимает объявления к верху.

Декларации в JavaScript поднимаются

В JavaScript можно声明 переменную после ее использования.

иначе говоря, можно использовать переменную до ее объявления.

Пример 1 сПример 2 результаты одинаковы:

Пример 1

x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find the element
elem.innerHTML = x;                     // Показать x в элементе
var x; // Объявить x

Попробуйте это на практике

Пример 2

var x; // Объявить x
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find the element
elem.innerHTML = x;                     // Показать x в элементе

Попробуйте это на практике

Чтобы понять это, вам нужно понять термин "hoisting".

Hoisting - это defaultManager JavaScript, который поднимает все объявления к верху текущего контекста (к верху текущего скрипта или текущей функции).

ключевые слова let и const

используя let или const Переменные и константы, объявленные, не поднимаются!

Пожалуйста, JS Let / Const Читайте больше о let и const здесь.

Инициализация в JavaScript не поднимается

JavaScript поднимает только декларации, а не инициализации.

Пример 1 сПример 2 результаты различаются:

Пример 1

var x = 5; // Initialize x
var y = 7; // Инициализация y
elem = document.getElementById("demo"); // Find the element
elem.innerHTML = x + " " + y;           // Show x and y

Попробуйте это на практике

Пример 2

var x = 5; // Initialize x
elem = document.getElementById("demo"); // Find the element
elem.innerHTML = x + " " + y;           // Show x and y
var y = 7; // Инициализация y 

Попробуйте это на практике

Может ли быть правдой, что в последнем примере y по-прежнему неопределен?

Это потому, что только декларация (var y) а не инициализация (=7) поднимается наверх.

Благодаря hoisting, y была объявлена до ее использования, но поскольку инициализация не была поднята, значение y по-прежнему неопределено.

Пример 2 также аналогичен:

Пример

var x = 5; // Initialize x
var y;     // Declare y
elem = document.getElementById("demo"); // Find the element
elem.innerHTML = x + " " + y;           // Show x and y
y = 7;    // Assign 7 to y

Попробуйте это на практике

Объявляйте свои переменные в начале!

Hoisting (для многих разработчиков) — это неизвестное или игнорируемое поведение JavaScript.

Если разработчик не понимает hoisting, в программе могут быть ошибки (bug).

Чтобы избежать ошибок, всегда объявляйте все переменные в начале каждой области действия.

Поскольку именно так JavaScript интерпретирует код, поддерживайте эту хорошую привычку.

Строгий режим JavaScript не позволяет использовать переменные без их предварительного объявления.

Познакомьтесь с этим в следующей главе:use strict