L'expression de la fonction elle-même ne peut pas attribuer un nom à une autre valeur

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

  •  27-10-2019
  •  | 
  •  

Question

Dans le code ci-dessous:

(function (){
    function test(){};//"function"
    var test;//"undefined"
    var printTest = typeof test;
    document.write(printTest);
})();

printTest affiche « fonction » au lieu de « non défini », ce qui est logique puisque de ma compréhension, les déclarations de variables sont toujours « hissés » au sommet du contexte d'exécution (qui dans ce cas est le contexte d'exécution de la fonction) Cela rend la déclaration de fonction « test () » pour être celui qui apparaît plus tard dans le cadre de l'exécution en cours. Considérons maintenant ce code où j'attribue en fait une valeur à la déclaration var « var test = 1 ».

(function (){
        function test(){};
        var test=1;//assign value to a variable here
        var printTest = typeof test;
        document.write(printTest);
    })();

Alors printTest affiche « numéro » maintenant, ce qui signifie que le contexte d'exécution maintient maintenant un ordre différent. Quelqu'un peut-il expliquer ce qui est réellement passé ici?

Était-ce utile?

La solution

sépare Hisser l'affectation réelle de la déclaration de variable. Qu'est-ce qu'il fait vraiment est la suivante:

(function (){
        var test, printTest;
        test = function (){};
        test = 1;//assign value to a variable here
        printTest = typeof test;
        document.write(printTest);
    })();

Autres conseils

var test signifie seulement « Tout test appelé doit être scope localement ». Il est indéfini seulement parce que vous n'avez pas attribué une valeur à (sauf que vous avez avec function test(){}; ce qui est la raison pour laquelle vous obtenez function et non undefined).

Dans le second exemple, function test(){}; attribue encore une fonction, mais alors écrasements var test=1; que avec un 1. Vous utilisez typeof après vous attribuez le 1 à lui, il signale qu'il est un nombre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top