recherche

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

javascript - Questions sur la fermeture de fonctions et le passage de fonctions en tant que paramètres

1.Description :

Je veux obtenir un résultat de tableau de fonctions. Tout d'abord, la fonction func ajoute des fonctions anonymes au résultat du tableau (chaque fonction anonyme enregistre son propre numéro)

Mais j'ai passé des paramètres à la fonction anonyme après le retour, ce qui équivaut à simplement la remplacer. Pourquoi les résultats sont-ils différents ?

function func(){
  var result =[] ;
  for(var i=0;i<3;i++){
    result.push(
      function (num){
        return function (){
          return num
        }      
      }(i)
    )
  }
 return result
}

console.log(func()[1]())  //这样我就能得到各自函数里的num

Ensuite, je passe la fonction anonyme après retour en paramètre, mais je n'arrive pas à l'obtenir.

function func(fn){
  var result =[] ;
  for(var i=0;i<3;i++){
    result.push(
      function (num){
        return fn;     
      }(i)
    )
  }
 return result
}

function fn(){
  return num
}
console.log(func(fn)[1]()) //报错提示num未定义
  
世界只因有你世界只因有你2708 Il y a quelques jours792

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

  • PHP中文网

    PHP中文网2017-06-26 10:52:31

    Parce que fn dans le deuxième morceau de code est défini dans l'environnement global.
    Vous pouvez consulter le code ici et ci-dessous, j'espère qu'il vous sera utile

    function func(fn){
      var result =[] ;
      for(var i=0;i<3;i++){
        result.push(
          function (num){
            return fn;     
          }(i)
        );
      }
     return result;
    }
    
    function fn(){
      return num;
    }
    var num = 1;
    console.log(func(fn)[1]()); //1

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-26 10:52:31

    Il s'agit d'un problème de portée très simple. Les paramètres formels de la fonction définis dans votre boucle ne fonctionnent que dans cette fonction.

    Les fonctions ne doivent pas être définies dans des boucles ou dans des conditions de jugement, car de nombreux problèmes inattendus pourraient survenir. Retirez votre fonction et définissez-la, et vous constaterez que la logique est beaucoup plus claire.

    répondre
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-26 10:52:31

    Problème de portée numérique, JavaScript a une portée de fonction, num est à l'intérieur de la première fonction et la deuxième fonction est en dehors de la première fonction, alors la deuxième fonction ne peut pas obtenir num.

    répondre
    0
  • Annulerrépondre