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é.
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.
Dans votre IIFE
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 ..