javascript - J'aimerais vous poser une question sur la promotion des fonctions en JS?
代言
代言 2017-06-12 09:30:06
0
3
608

Le code suivant :

function a() {
    console.log('1')
}    

(function() {
    console.log(a);
    if(1) {
        function a() {
            console.log('2');
        }
    }
})()

Après l'exécution, la sortie n'est pas définie.

Après avoir supprimé la condition if, la sortie est la deuxième fonction a

function a() {
    console.log('1')
}    

(function() {
    console.log(a);

    // if(1) {
        function a() {
            console.log(2);
        }
    // }
})()

Sachant que la fonction est améliorée, dans le deuxième morceau de code, la seconde fonction sera promue avant le code console.log(a), donc la seconde fonction sera exécutée et affichée.
Mais dans le premier morceau de code, je ne comprends pas pourquoi undefined est affiché.

代言
代言

répondre à tous(3)
代言

Les déclarations de fonctions conditionnelles sont traitées de la même manière que les expressions de fonction. Par conséquent, les déclarations de fonctions conditionnelles perdent les propriétés de levage des déclarations de fonctions.

URL de référence : /q/10...

刘奇

Lors de l'utilisation du mot-clé function dans une instruction if else pour déclarer une fonction, la promotion des variables est différente selon les navigateurs. C'est juste que la déclaration d'une variable est promue ici, et si else est supprimé, elle devient une pure portée de fonction.

function a() {
    console.log('1')
}    

(function() {
    var a;
    console.log(a);
    if(1) {
        a = function a() {
            console.log('2');
        }
    }
})()
学习ing

Dans votre IIFE

 if(1) {
  a = function a() {
    console.log('2')
  }
} 

est une expression de fonction, pas une déclaration de fonction. Lorsque le if est supprimé, c'est une déclaration de fonction. Si n'est pas supprimé, conosle.log(a), a représente la variable non définie a, reportez-vous à https://developer. mozilla.org ..

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