javascript - Déclaration de fonction et priorité de déclaration de variable
学习ing
学习ing 2017-06-12 09:28:15
0
7
880
  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

学习ing
学习ing

répondre à tous(7)
黄舟

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...

某草草

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.

洪涛

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

黄舟

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.

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

黄舟
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 ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal