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未定义
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
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.
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.