Когда мы запускаем код, есть две его фазы, первая из которых creation phase
, на этом этапе синтаксический анализатор считывает код и выводит функцию и переменные, а вторая фаза - execution phase
, в которой значения присваиваютсяпеременные,
Примечание: здесь функция хранится в памяти на этапе создания, так как именно там, где переменные поднимаются, но значенияне инициализирован (который будет назначен на этапе выполнения)
Компилятор будет обрабатывать ваш код следующим образом после подъема
function checkType() {
var foo = function() {}; //hoisted function
return foo;
foo = 10;
foo = 11;
};
console.log(typeof checkType(), '\nRturned value from function --->', checkType())
Если вы определили свою функцию как переменную, то она будет только показана, но не будет инициализирована значением, вы можете увидеть приведенный ниже пример
function checkType() {
return foo;
foo = 10;
var foo = function foo() {};
var foo = 11;
};
console.log(typeof checkType(), '\nRturned value from function --->', checkType())