В слайде # 6 (http://ejohn.org/apps/learn/#6) «Усовершенствованный Javascript» Джона Ресига показано, что вы можете использовать функцию до ее определения. Вот код:Использование функции javascript перед ее определением
var canFly = function(){ return true; };
window.isDeadly = function(){ return true; };
assert(isNimble() && canFly() && isDeadly(), "Still works, even though isNimble is moved.");
function isNimble(){ return true; }
Однако, я заметил, что следующий код не проходит тест.
assert(canFly(), "Still works, even though isNimble is moved.");
var canFly = function(){ return true; };
Похоже, присвоение анонимной функции переменной отличается от определения именованной функции. Почему это? И как называется эта концепция, которая описывает способность использовать функцию перед ее определением на языке?
Возможный дубликат [JavaScript «hoisting»] (http://stackoverflow.com/questions/15311158/javascript-hoisting) –
Поисковый запрос «JavaScript hoisting» - проверьте связанный дубликат (с немного другим кодом, но хорошие ссылки) - переменные видны для всей функции (путь до 'var'), но получат значение только при первом назначении. –
@AlexeiLevenkov Не лучший ли ответ, скорее, вопрос о сфере действия, а не о порядке вещей? –