console.log(f);//function f(){return 1}
function f(){
return 1
}
var f=2;
Je pensais auparavant que si une fonction et une variable portaient le même nom, la promotion de la déclaration de fonction remplacerait la promotion de la déclaration de variable, puis j'ai testé le code suivant
function f(){
return 1
}
var f=2;
console.log(f);//2
La sortie de console.log(f) sera différente selon la position. Qui écrase qui, ou y a-t-il une autre raison ?
Veuillez demander au maître de vous expliquer
Premier paragraphe
Équivalent à=>
Deuxième paragraphe
Équivalent à=>
Voir
https://www.zhihu.com/questio...
Lors de la définition d'une fonction qui n'est pas dans un bloc, hissez d'abord la fonction, puis la déclaration de variable. Reportez-vous à ECMAScript 5, section 10.5.
.Les exemples sont les suivants :
La sortie ci-dessus est une fonction. Elle n'est pas indéfinie. Alors, promouvez d'abord la fonction, puis promouvez la déclaration de variable.
L'interpréteur JS fera d'abord la promotion de l'instructionvar
Notez que promeut l'instruction de déclaration var au lieu de l'instruction d'affectation.Ensuite, la déclaration de fonction sera promue. Par conséquent, la situation mentionnée ci-dessus se formeraPour le deuxième cas, j'estime que cela n'a rien à voir avec le levage. Bien qu'il soit également améliorévar f
,但这里关键在于执行赋值f = 2
puis publié. . C'est donc un bon choix pour prouver que JS est un langage faiblement typé = =Peut-être que ce que j'ai dit est ambigu, LZ, regardons les explications des autres
Selon les normes ecma, la déclaration de fonction est promue en premier ; mais pour être honnête, peu importe qui est promu en premier, le résultat est en fait le même, le saviez-vous ?
Le premier morceau de code est une promotion de variable, var f=indéfini, et la variable f pointe vers la fonction ; le deuxième morceau de code attribue 2 à f selon l'ordre d'exécution de JavaScript.
Lorsque js est exécuté, il sera exécuté de haut en bas.
Dans ce code, la déclaration de fonction function f et la déclaration de variable var f sont promues ensemble, mais la priorité de déclaration de fonction sera plus élevée,
donc le code devient
f=2 (Il appartient à l'affectation, la position reste inchangée mais la déclaration des variables est améliorée)
Deuxième code
Vous utilisez également la méthode ci-dessus pour comprendre
et elle est comprise par le moteur js comme
La fonction f est écrasée par la variable f, donc la sortie est 2
Comme ycloud l'a dit, la raison ci-dessus est que "la promotion de la définition de fonction n'est promue que dans la portée de bloc de if"
Si la définition de la fonction est promue uniquement dans la portée du bloc if, quelle est la raison de ce qui précède ? (Test Chrome58) Pourquoi les fonctions de la portée du bloc if sont-elles accessibles de l'extérieur ?