1
votes

Javascript: comment imprimer la valeur de retour de la fonction?

Je suis un débutant en Javascript et je lis la partie Closures and Variables du livre "JS for web developer". Il donne deux exemples:

[ [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function],
  [Function] ]

Dans la description du livre, il est dit dans func1, chaque fonction peut renvoyer 10, tandis que dans func2, chaque fonction renvoie un nombre différent. Mais quand j'exécute le code, il renvoie en fait:

function Func1() {
    var result = new Array();
    for (var i=0; i < 10; i++){
        result[i] = function() {
           console.log('i:'+i);
           return i; 
        };
    }

    return result;
}

console.log(Func1());

function Func2() {
    var result = new Array();

    for(var i=0; i < 10; i++){
        result[i] = function(num) {
            return function() {
                console.log('num:'+num);
                return num;
            };
        }(i);
    }

    return result;
}

console.log(Func2());

pour les deux fonctions.

Alors, comment imprimer les valeurs réelles de chaque fonction? Et pourquoi "console.log ('i:' + i);" n'est pas imprimé dans la première fonction?


3 commentaires

Pour imprimer la valeur de retour d'une fonction, vous devez d'abord l'appeler. Par exemple. var arr = Func1 (); arr [3] ();


@ L.L vous devez envelopper la fonction pour qu'elle soit appelée. Actuellement, vous affectez une fonction à la variable. Vous souhaitez appeler la fonction et renvoyer le résultat dans la variable. Vérifiez mon exemple ci-dessous.


var fncs = Func1 (); console.log (fncs [0] ()); console.log (fncs [1] ())


4 Réponses :


2
votes

Essayez ceci envelopper vos données de résultat [i] dans une fonction appelée pour obtenir les données dont vous avez besoin ...

vérifiez ceci:

function Func1() {
    var result = new Array();
    for (var i=0; i < 10; i++){
        result[i] = (function() {
           console.log('i:'+i);
           return i; 
        })();
    }

    return result;
}

console.log(Func1());


3 commentaires

Maintenant, je peux obtenir la valeur de la fonction. Mais maintenant func1 et func2 obtiennent le même résultat? [0, ..., 9]. Est-ce que tu sais pourquoi?


Quel résultat attendez-vous?


Dans la description du livre, la première fonction doit renvoyer 10 pour chaque fonction. La deuxième fonction doit renvoyer 0-9 pour chaque fonction. Mais maintenant, les deux fonctions renvoient [0, ..., 9].



1
votes

Vous renvoyez une fonction dans votre boucle for, à la place, vous devez simplement renvoyer la valeur à l'intérieur de votre fermeture.

function Func2() {
    var result = new Array();

    for(var i=0; i < 10; i++){
        result[i] = function(num) {
            console.log('num:'+num);
            return num;
        }(i);
    }

    return result;
}

console.log(Func2());


0 commentaires

1
votes

Compte tenu de la sortie courante de l'exécution de la fonction, un Tableau de fonctions, vous pouvez itérer le résultat de FuncN puis exécuter la fonction à chaque élément du tableau

for (let n = 0, f = Func1(); n < f.length; n++) {
  console.log(f[n]())
}


3 commentaires

console.log (f [n])? Sinon, il demande que f ne fonctionne pas.


@ L.L Non. Je n'ai pas réécrit le code à la question. Le code à la réponse exécute chaque fonction du tableau et imprime le résultat dans la console


Merci, de cette façon, je pourrais obtenir les 10 pour chaque fonction dans func1.



1
votes

Essayez-les comme ceci:

function Func1() {
    var result = new Array();
    for (var i=0; i < 10; i++){
        result[i] = function() {
           console.log('i:'+i);
           return i; 
        }();
    }
return result;

}

console.log(Func1());

function Func2() {
    var result = new Array();

    for(var i=0; i < 10; i++){
        result[i] = function(num) {
            return function() {
                console.log('num:'+num);
                return num;
            }();
        }(i);
    }

    return result;
}

console.log(Func2());

le problème est dû au fait que vous avez défini la fonction comme valeur de retour plutôt que de l'appeler puis de la renvoyer.

p >


1 commentaires

Maintenant, je peux obtenir la valeur de la fonction. Les deux fonctions renvoient [0, ..., 9]. Mais dans la description du livre, la première fonction doit renvoyer 10 pour chaque fonction. La deuxième fonction doit renvoyer 0-9 pour chaque fonction. Est-ce que tu sais pourquoi?