Подъем — очень важная концепция (или, скорее, поведение), если вы работаете с JavaScript. Все это сосредоточено на ключевом слове var. Когда я начал изучать JavaScript (я пришел из мира Java и C), меня «научили» использовать только let и const. В какой-то момент вам может понадобиться коснуться кода «var», может быть через библиотеку, которую вы должны исправить, или долгоживущий код. Вот когда это может стать опасным, если вы не знаете поведение подъема. Это также может помочь вам в интервью. Это похоже на C89 «объявление переменных в начале блока области видимости», но не совсем.

Короче говоря, Подъем в JavaScript означает, что объявления, включая объявления функций, перемещаются в начало/начало блока кода. Таким образом, вы можете объявить переменную с помощью var и использовать ее перед этой строкой. Инициализации не поднимаются, поэтому вы можете столкнуться с undefined is not... проблемами, если не будете осторожны.

В этом примере вы видите самые важные моменты по подъему JavaScript. Если вы не знали, в JavaScript каждая переменная, которую вы объявляете, изначально имеет значение undefined. По сравнению с Java и другими языками со строгой и статической типизацией (где int может быть изначально установлено в 0), это отличается. Суть этого примера в том, что объявление перемещается в верхнюю часть блока. Для вызова в строке 7 это может стать очень опасным, потому что вы можете подумать, что значение по-прежнему равно 42.

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

Подъем — это уже не очень известная концепция, поскольку ключевые слова let и const были введены в стандарте ES6. Особенно при повторном объявлении переменных ключевое слово var может сбить с толку и стать потенциальным источником ошибок. В большинстве современных проектов JavaScript вы будете использовать линтеры, которые имеют определенные правила для «принудительного применения», например, let вместо var.

Первоначально опубликовано на https://mariusreimer.com 17 июня 2019 г.