0
votes

JS: problème de fonction d'ordre supérieur; Acceptez la fonction de tableau et de rappel -> Ne comprenez pas

J'ai le problème suivant ci-dessous:

My Pour chaque

Écrivez une fonction myForeach qui accepte une matrice et une fonction de rappel. Le comportement de MyForeach doit refléter la fonctionnalité de la méthode de la matrice native .foreseach () aussi près que possible.

ci-dessous est le code: xxx

Le code ci-dessus fonctionne dans ce problème de fonction d'ordre supérieur, mais je ne comprends pas pourquoi. Spécifiquement, quelle est la ligne de code suivante signifie: xxx

Pourquoi y a-t-il 3 arguments? Et où sont passés ces arguments?


3 commentaires

Callback est une référence à addtosum , qui utilise uniquement le premier argument num et ignore les deux suivants passés.


Il s'agit simplement de refléter exactement la méthode Native FORECH . Le rappel à cela prend 3 arguments, la même chose qu'ici: l'élément, son index et la matrice elle-même: développeur.mozilla.org/en-us/docs/web/javascript/reference/...


Au fait, je ne sais pas si cela se trouve "tricherie", mais il ne serait-il pas beaucoup plus facile de simplement utiliser MyForeach (Anarray, Callback, Thisarg) {anarray.foreach (rappel, cet objectif); } ?


3 Réponses :


0
votes

Lire ici à ce sujet. JavaScript ne se soucie pas du nombre de paramètres que vous passez. Par exemple, le code suivant fonctionne toujours mais des alertes non définis code> dans la fonction addtosum code>:

p>

let sum = 0;

function addToSum(num, i, k, j) {
  sum += num;
  console.log("i is:" + i);
  console.log("k is:" + k);
  console.log("j is:" + j);
}

let nums = [10, 20, 30];

function myForEach(anArray, callback) {
  for (let i = 0; i < anArray.length; i++) {
    let num = anArray[i];
    //console.log(num)

    // I don't understand what this line of code is doing...
    callback(num);
  }
  return undefined
}

myForEach(nums, addToSum);
console.log(sum);


0 commentaires

0
votes

C'est une fonction de rappel:

let sum = 0;

function addToSum(num) {
  sum += num;
}

let nums = [10, 20, 30];


function myForEach(anArray) {


  for (let i = 0; i < anArray.length; i++) {
    let num = anArray[i];
    //console.log(num)

    // I don't understand what this line of code is doing...
    addToSum(num, i, anArray);
  }
  return undefined
}



myForEach(nums, addToSum);

console.log(sum); 


0 commentaires

1
votes

"aussi étroitement que possible" est une condition difficile. Les fonctions intégrées JavaScript sont très compliquées! Ce sont les étapes que la norme vous oblige à mettre en œuvre:

http: //www.ecma- international.org/ecma-262/7.0/#ssec-array.Prototype.foreach

En termes de layman, puisque JS est une langue très dynamique, lorsque vous concevez une fonction intégrée, vous ne pouvez pas simplement compter sur les paramètres d'étant ce que vous attendez qu'ils soient. En cas de foreach :

  • L'argument ne peut être pas un tableau, et même pas un objet
  • Il pourrait ne pas avoir longueur ou sa longueur pourrait ne pas être un nombre
  • Le rappel peut être manquant ou ne pas être une fonction

    et ainsi de suite. C'est pourquoi la mise en œuvre "aussi proche que possible" devrait faire beaucoup de vérifications de sécurité avant qu'elle ne commence à boucher et à appeler.

    Vous pouvez trouver un exemple d'un monde réel foreach Polyfill sur la page MDN (regardez uniquement si vous avez décidé d'abandonner cela):

    https: //developer.mozilla .Org / fr-US / DOCS / Web / JavaScript / Référence / Global_Objects / Array / Foreach


0 commentaires