Само выражение функции не может присвоить имя другому значению
-
27-10-2019 - |
Вопрос
В коде ниже:
(function (){
function test(){};//"function"
var test;//"undefined"
var printTest = typeof test;
document.write(printTest);
})();
PrintTest будет отображать «функцию» вместо «неопределенного», что имеет смысл, поскольку, насколько я понимаю, любые объявления переменных всегда «поднимаются» в верхнюю часть контекста выполнения (что в данном случае является контекстом выполнения функции) Это делает объявление функции «test ()» - это тот, который появляется позже в текущем контексте выполнения. Теперь рассмотрим этот код, где я фактически присваиваю значение VAR объявлению "var test = 1".
(function (){
function test(){};
var test=1;//assign value to a variable here
var printTest = typeof test;
document.write(printTest);
})();
Затем PrintTest отображает «номер» сейчас, что означает, что контекст выполнения теперь сохраняет другой заказ. Может кто -нибудь объяснить, что на самом деле здесь произошло?
Решение
Подъем отделяет фактическое назначение от объявления переменной. Что на самом деле делает это:
(function (){
var test, printTest;
test = function (){};
test = 1;//assign value to a variable here
printTest = typeof test;
document.write(printTest);
})();
Другие советы
var test
Только означает «все, что называется тестом, должно быть охвачено локально». Это не определено только потому, что вы не присвоили ему значение (кроме как с function test(){};
Вот почему вы получаете function
и не undefined
).
Во втором примере, function test(){};
все еще назначает функцию, но затем var test=1;
перезаписывает это с помощью 1
. Анкет Ты используешь typeof
после Вы назначаете 1
На это, поэтому он сообщает, что это число.