Рубрики
Без рубрики

Подъем со своим собственным летардом

Еще один пост о подъеме – но с Шекспиром и ваном Halen!. Помечено с JavaScript, поднимаем, Шекспир, Ванхален.

В JavaScript, Подъем Относится к идее, что объявления – как переменных, так и функций – автоматически перемещаются в верхнюю часть их объема. Обратите внимание, что это не значит, что они физически переехал в ваш файл . Скорее, это сокращение для объяснения ключевого аспекта Контекст выполнения – В частности, заказ, в котором интерпретатор JavaScript, ну интерпретирует информацию в любой заданной области. Мы проиллюстрируем с некоторыми примерами через минуту, но, во-первых, важный вопрос: что значит «подъемник» даже?

Либеральные искусства взаимосвязаны

Подъем это английское слово среднего дня 15 века происходит Из подобных слов на других германских языках (например, голландский и низкий немецкий) означает «поднять» или «поднять». «Его самое известное использование на английском языке, несомненно, нашему другу Шекспира, в Гамлет . Гамлет, понимая, что его предполагаемые друзья на самом деле несут письмо с смертным ордерам Гамлета, тайно изменяют письмо, чтобы они были убиты вместо этого, и замечания « Для «TIS спортивный двигатель/подъемник со своим собственным петром». «A Phetard была небольшая бомба, используемая военными инженерами, подняла на ворота или препятствия, чтобы взорвать их при пробивке укрепления, и, так, чтобы подъем со своим собственным летардом стал английским идиомом» взорвать свою собственную бомбу »или« попасть в свою ловушку. ” Немного, как то, что может случиться с инженером программного обеспечения, который не принимает Подъем во внимание при включении кода JS.

Примеры кода

Итак, вернемся к этому. Переводчик JS в браузере работает как один поток, то есть только одно можно произойти одновременно. Каждый раз, когда он считает новый объем, он делает эти несколько вещей в том же порядке. Среди них Глядя через весь объем для функций и переменных объявлений и Выполнение функций и назначение значений переменных – Первый всегда перед последним. Практический эффект – интерпретировать код, как если бы все объявления были подниматься на вершину своих соответствующих областей, в то время как назначения остаются в своих оригинальных местах. Например:

badDude = 'Kylo Ren';
var badDude;
console.log(badDude) // prints 'Kylo Ren'

Хотя мы никогда не присваивали значение Baddude Объявив его как переменную, он все еще логирует «Kylo Ren», потому что Декларация была поднята на вершину объема до того, как код был выполнен, как если бы мы написали:

var badDude;
badDude = 'Kylo Ren';
console.log(badDude) // prints 'Kylo Ren'

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

goat(); // prints "Messi is the greatest of all time!"

function goat() {
  console.log("Messi is the greatest of all time!");
}

Здесь мы объявляем функцию в глобальном масштабе, та же объем, в которой коза () называется, и, следовательно, декларация функции была поднята на вершину глобального масштаба, выше Вызов функции.

Обратите внимание, что это не так, однако, когда функция является назначенным значением переменной. Если мы изменили наш пример, чтобы он читал:

goat(); // undefined

var goat = () => {
  console.log("Messi is the greatest of all time!");
}

Вар коз поднимается на вершину, но выражение, назначенное ему, остается на месте – ниже вызова функции – так что коза () Отпечатки undefined Отказ

Помните область!

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

var leadSinger = 'Diamond Dave';

(function vanHalen() {

  console.log('First lead singer was ' + leadSinger);  // prints undefined

  var leadSinger = 'Sammy Hagar';
  console.log('Second lead singer was ' + leadSinger); // prints "Sammy Hagar"
})()

Как кто-то может не знать, что Дэвид Ли Рот был первым (и единственным истинным) певицейским певцом Ван Хрена, но это JavaScript для вас. Здесь Re -Декларация переменных лидерщина переходит в верхнюю часть его объема (в этом случае локальный или функциональный объем), в то время как его назначение остается на месте. Он перезаписывает назначение, сделанное в глобальном масштабе и, таким образом, не определено, когда мы приедем на первое console.log () Отказ Если бы мы хотели дать бриллиант Дэйв его должным образом, мы могли бы просто не заявить ведущий певец , но просто переназнайте его.

var leadSinger = 'Diamond Dave';

(function vanHalen() {

  console.log('First lead singer was ' + leadSinger);  // prints "Diamond Dave"

  leadSinger = 'Sammy Hagar';
  console.log('Second lead singer was ' + leadSinger); // prints "Sammy Hagar"
})()

Оригинал: “https://dev.to/adamfriedl/hoist-with-his-own-js-petard-bmh”