recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Je vois une fonction dans la section de déclaration de fonction et je ne la comprends pas très bien.

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!')
    }
}
我想大声告诉你我想大声告诉你2732 Il y a quelques jours805

répondre à tous(4)je répondrai

  • 黄舟

    黄舟2017-07-05 10:40:34

    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

    .

    répondre
    0
  • 黄舟

    黄舟2017-07-05 10:40:34

    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

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-07-05 10:40:34

    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

    if(condition){
        function sayHi(){
            alert('hi')
        }
    }else{
        function sayHi(){
            alert('Yo')
        }
    }

    et écrit par

    function sayHi(){
      alert('hi')
    }
    function sayHi(){
      alert('Yo')
    }

    Pas de différence essentielle

    répondre
    0
  • PHP中文网

    PHP中文网2017-07-05 10:40:34

    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,

    répondre
    0
  • Annulerrépondre