Ceci est un exemple de l'élévation js ci-dessus
Voyez que la déclaration de fonction a un code
if(condition){
function sayHi(){
alert('hi')
}
}else{
function sayHi(){
alert('Yo')
}
}
On dit que ce code a une syntaxe invalide. La plupart des navigateurs renverront la deuxième instruction et Firefox renverra la première instruction. Pourquoi ?
S'il peut être modifié en une forme d'expression de fonction, pourquoi ?
var sayHi;
if(condition){
sayHi=function(){
alert('Hi')
}
}else{
sayHi=function(){
alert('Yo!')
}
}
Parce que la première est une déclaration de fonction, mais les fonctions ne sont généralement pas déclarées dans if-else
La seconde consiste à attribuer la fonction anonyme à la variable. La promotion n'existe pas
.L'écriture directe de la fonction xxx(){} entraînera une déclaration anticipée. S'il existe deux fonctions de ce type portant le même nom, cela équivaut à exécuter var xxx deux fois en haut, elle n'est donc pas valide
Cela n'a rien à voir avec le préfixe de déclaration. À cette époque, les spécifications JavaScript étaient encore ES5, les navigateurs n'avaient pas encore implémenté la portée au niveau du bloc (ES2016+) et le niveau de la portée était uniquement au niveau de la fonction. Alors tu l'as écrit
et écrit par
Pas de différence essentielle
js est déclaré à l'avance ! ! ! La fonction sera directement mentionnée en haut du scope lors de sa déclaration. Il n'y a pas de portée dans if, donc les deux fonctions constituent une seule portée et la seconde remplacera la première. ! Quant à votre deuxième code, vous déclarez d'abord la variable sayhi, puis attribuez la valeur à sayhi après le jugement if,