2016-04-18 4 views
4

Возможно, что это немного бессмысленно, но почему первый вызов ниже работает, а второй - неудачен?Почему вызов с именем назначенной функции завершается с ошибкой в ​​JavaScript?

var foo = function bar() { 
    console.log("Martini"); 
} 

foo(); // works 
bar(); // undefined; i.e. "Uncaught ReferenceError: bar is not defined" 

Это связано с областью?

Задача начальника: определение функции «анализирует» - но это действительно действительный синтаксис - и есть ли какой-либо контекст, где смысл присвоения назначенной анонимной функции имеет смысл?

+0

Я думаю, что нашел ответ на вторую часть моего вопроса здесь: [В Javascript, когда необходимо назначить именованную функцию переменной?] (Http://stackoverflow.com/questions/33627048/in -javascript-when-is-it-needed-to-assign-a-named-function-to-a-variable) – Christian

+1

Должно читать: http://stackoverflow.com/a/338053/652669 –

+1

Другое важное различие между функцией декларации/выражения - это то, что первые были подняты с их именем и телом функции, в то время как последние были только подняты с их именем, то есть 'foo' является' undefined', пока его тело функции не будет достигнуто в коде. – rand

ответ

8

Функция декларации создать переменную с тем же именем, что и они, в текущей области.

Функция выражения (названные или анонимные). Имя выражения функции доступно как переменная внутри функция (где она полезна для рекурсивного вызова) и в средствах отладки.