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 ?
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.
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é.
Parce que vous attribuez simplement des fonctions aux éléments du tableau et que vous n'appelez pas ces fonctions.
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