Maison > Questions et réponses > le corps du texte
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é.
代言2017-06-12 09:32:06
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...
怪我咯2017-06-12 09:32:06
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');
}
}
})()
学习ing2017-06-12 09:32:06
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 ..