Причина, по которой функция является значением foo
, заключается в том, что в этой строке:
var foo;
Вы просто заявляете foo
- это утверждение, которое ничего не делает.
Если вы на самом деле установите foo
на что-то, например "FooBar":
function foo() {
console.log(8);
}
var foo = "FooBar";
console.log(foo);
Она перезаписывает функцию, потому что, как показано в в этом вопросе , объявление чего-либо со значением var
, которое является значением, приведет к тому, что это значение будет "поднято" наверх и, таким образом, является фактическим значение идентификатора.