Maison > Questions et réponses > le corps du texte
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
黄舟2017-06-12 09:30:15
Premier paragraphe
console.log(f);//function f(){return 1}
function f(){
return 1
}
var f=2;
Équivalent à=>
var f;
function f() {
return 1
}
console.log(f); //function f(){return 1}
f = 2;
Deuxième paragraphe
function f(){
return 1
}
var f=2;
console.log(f);//2
Équivalent à=>
var f;
function f() {
return 1
}
f = 2;
console.log(f); //2
Voir
https://www.zhihu.com/questio...
某草草2017-06-12 09:30:15
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 :
function f(){}
var f;
console.log(f);
var g;
function g(){}
console.log(g);
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.
PHP中文网2017-06-12 09:30:15
L'interpréteur JS fera d'abord la promotion de l'instruction var
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 formera
Pour 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
黄舟2017-06-12 09:30:15
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 ?
为情所困2017-06-12 09:30:15
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.
漂亮男人2017-06-12 09:30:15
Lorsque js est exécuté, il sera exécuté de haut en bas.
console.log(f);//function f(){return 1}
function f(){
return 1
}
var f=2;
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
var f;
function f() {
return 1
}
console.log(f);
f = 2;
f=2 (Il appartient à l'affectation, la position reste inchangée mais la déclaration des variables est améliorée)
Deuxième code
function f(){
return 1
}
var f=2;
console.log(f);//2
Vous utilisez également la méthode ci-dessus pour comprendre
et elle est comprise par le moteur js comme
function f(){
return 1
}
var f;
f=2;
console.log(f);//2
La fonction f est écrasée par la variable f, donc la sortie est 2
黄舟2017-06-12 09:30:15
console.log(e());//error
if(true){
function e() {
return 10;
}
}
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"
if(true){
function e() {
return 10;
}
}
console.log(e());//10
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 ?