L'expression de la fonction elle-même ne peut pas attribuer un nom à une autre valeur
-
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?
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.