recherche

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

Problème JavaScript concernant le renvoi de la valeur du tableau de fonctions

Quand j'apprenais le problème de fermeture de js, j'ai tapé et expérimenté les exemples de code sur la programmation avancée js, mais les résultats n'étaient pas cohérents et je n'arrivais pas à le comprendre.

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

Le résultat de ce code devrait être un tableau, chaque valeur est 10, mais après avoir expérimenté dans le navigateur, j'ai découvert que ce qui est renvoyé est un tableau de fonctions.

Pourquoi ne renvoie-t-il pas un tableau numérique ?

为情所困为情所困2776 Il y a quelques jours512

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

  • 仅有的幸福

    仅有的幸福2017-05-19 10:32:05

    est un tableau de fonctions. Bien que chaque fonction ait une valeur de retour i, cette fonction n'est pas exécutée.
    Lisez attentivement la page 181 du livre, la première phrase sous le code.

    Cette fonction renverra un tableau de fonctions.

    J'étais un peu confus quand j'ai vu cela auparavant, j'ai senti qu'il serait plus intuitif de renvoyer les 10 directement. Après y avoir réfléchi, si j'ajoute () directement après la fonction renvoyée, cela équivaut à créer une fonction d'exécution immédiate à chaque fois. Le i renvoyé est la valeur d'index normale à chaque fois, ce qui n'obtiendra pas l'effet souhaité.

    function createFunction(){
        var result = new Array();
        for (var i = 0; i < 10; i++) {
            result[i] = function(){
                return i;
            }();
        }
        return result;
    }
    createFunction()    //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    répondre
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:32:05

    Parce que vous attribuez simplement des fonctions aux éléments du tableau et que vous n'appelez pas ces fonctions.

    function createFunction(){
        var result = new Array();
        for (var i = 0; i < 10; i++) {
            result[i] = (function(){
                return i;
            })();
        }
        return result;
    }

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-19 10:32:05

    result est un tableau dont les éléments sont des fonctions.

    C'est pourquoi vous êtes dans cette situation

    Si vous voulez obtenir tout ce que vous voulez 10, parcourez simplement le tableau et appelez la fonction qui est l'élément du tableau, et enregistrez la valeur de retour

    createFunction().forEach(fn => console.log(fn())); 

    répondre
    0
  • Annulerrépondre