Problème JavaScript concernant le renvoi de la valeur du tableau de fonctions
为情所困
为情所困 2017-05-19 10:30:05
0
3
509

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 ?

为情所困
为情所困

répondre à tous(3)
仅有的幸福

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]
漂亮男人

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;
}
洪涛

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())); 

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal