В какой-то момент, когда вы читаете о сфере видимости в JavaScript, вы, возможно, встретили термин подъем . Он часто используется в контексте определений переменных или функций.
Например, рассмотрим следующий код:
йоЗотеЬЫпд ();
для (i = 0; i
Вид на JS Bin
Хотя функция doSomething ()
вызывается до ее определения, код все еще работает. Фактически, цикл для
не запускается, пока механизм JavaScript не выяснит, что doSomething ()
определен и может выполнить вызов.
Во многих блогах и книгах на протяжении многих лет, это то, что называется «подъем». Например, популярная книга Дуга Крокфорда JavaScript: The Good Parts говорит:
"
функции
подлежат подъему. Это означает, что независимо от того, где размещена функция, она перемещается в верхнюю часть области, в которой она определена."
Аналогичным образом, в JavaScript Дэвида Фланагана: Полное руководство говорит:
«Эта функция … неофициально известна как подъем: код JavaScript ведет себя так, как будто все объявления переменных в функции …« подняты »вверху функции.»
Фланаган получает это более прав, чем Крокфорд, потому что он правильно указывает, что «подъем» является неофициальным термином и использует фразу «как бы», чтобы указать, что это не то, что на самом деле происходит.
Для всех практических целей большинство объяснений о подъеме прекрасны и служат своей цели, помогая понять, как все работает. Но вот о чем говорят авторы секретов JavaScript-ниндзя о подъеме:
«Объявления переменных и функций технически« не перемещаются »нигде, они посещаются и регистрируются в лексических средах до того, как будет выполнен какой-либо код».
Это то, что Фланаган более или менее намекнул, но вышеприведенная цитата делает более явным. Эта последняя книга имеет довольно обширный раздел в одной из глав, в которых обсуждаются лексические среды, поэтому не забудьте взять копию, если хотите расширить свое понимание этой темы.
Этот быстрый совет появляется на этой неделе в выпуске Web Tools Weekly.