Независимо от того, определяют ли я функцию после переменнойПочему объявления переменных всегда переписывают объявления функций?
var a = 1;
function a() {};
typeof a // number
Или, если я определить функцию перед переменной
function a() {};
var a = 1;
typeof a // number
конечный typeof
результат всегда number
я нашел объяснение около execution context
в http://davidshariff.com/blog/what-is-the-execution-context-in-javascript/
Before executing the function code, create the execution context.
......
Scan the context for variable declarations:
If the variable name already exists in the variable object, do nothing and continue scanning.
но это не работает.
Так как я могу это объяснить?
Попробуйте 'var a = function() {};' и посмотрите, что возвращает 'typeof'. – asawyer
[Javascript parse/evaluation order?] (Http://stackoverflow.com/questions/2742195/javascript-parse-evaluation-order) – Andreas
Функция a() {} будет (должна) всегда подниматься до var в области. поэтому последний тип a всегда является числом. Поэтому в «современном» javascript лучше объявить именованные функции как var a = function() {} – mpm