Само выражение функции не может присвоить имя другому значению

StackOverflow https://stackoverflow.com/questions/6318835

  •  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 На это, поэтому он сообщает, что это число.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top