2013-12-21 1 views
0

JavaScript позволяет это:Почему JavaScript разрешает объявление функций после оператора return?

function outside() { 
    inside(); 
    return 44; 

    function inside() { 
     console.log("inside"); 
    } 
} 

Когда outside называется выход является:

inside 
44 

Почему эту работу и почему она не работает для других утверждений, как показано ниже:

function outside() { 
    return 44; 
    console.log("inside"); 
} 

который только печатает 44.

+0

Это потому, что он вызывает внутри() перед возвратом, поэтому он выполняет, неважно, где вы размещаете функцию. –

ответ

2

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

function outside() { 
    function inside() { 
     console.log("inside"); 
    } 
    inside(); 
    return 44; 
} 

Подробности можно найти в описании, 10.4.3 Entering Function Code и 10.5 Declaration Binding Instantiation.

Почему JavaScript разрешает объявление функций после оператора возврата?

Почему язык определен таким образом, на который, вероятно, может ответить только Брендан Эйх.

0

В первом случае первая функция выполняется внутри, а затем он приходит к return..so возвращается 44 ..

Но во втором случае возвращения снаружи функция первые встречи, что означает, чтобы выйти из этой функции независимо от того, что не вернемся ниже ... так что печатает только 44

0
function outside() { 
inside(); //calling inside(); 
return 44; 

function inside() { 
    console.log("inside"); 
} 
} 

но здесь

function outside() { 
return 44; 
console.log("inside"); 
} 

вы только возвращение не вызывая inside().

2

Поскольку файл разобран, сначала считываются первые и определения функций. Вы являетесь , вызывая функции перед вами return, так что все работает нормально. Большинство языков программирования позволяют определять функции после их вызова, потому что все они работают в два этапа: анализ и выполнение.

+0

Я не думаю, что что-то оценивается во время разбора. –

+0

Nitpicky. ;-) Изменена моя формулировка. – deceze

+0

;) ............. –

0

Объявление функции:

function myName() { 

} 

Функция Выражение:

var myName = function() { 

}; 

Они очень разные, объявление функции (1) определяется, когда Javascript анализируется, и не тогда, когда он казнены. тогда как выражение функции (2) определено при выполнении Javascript.

Так что технически это не определяется после оператора возврата.

По крайней мере, так я это понимаю.

Смежные вопросы