Comment les fonctions d'ordre supérieur telles que .map() fonctionnent-elles dans JavaScript ?
P粉107772015
P粉107772015 2023-08-25 17:41:30
0
2
372

De nos jours, tout le monde essaie d'utiliser ces fonctions d'ordre supérieur pour obtenir des résultats prometteurs en écrivant moins de code. Mais je veux savoir comment ces fonctions fonctionnent en interne.

Supposons que j'écrive quelque chose de similaire

var number = [16, 25, 36]; var résultats = nombres.map(Math.sqrt); console.log(résultats); // [4, 5, 6]

Je sais que chaque élément du tableau "number" est itéré un par un, mais comment ?

J'ai essayé de le rechercher, mais je n'ai pas encore obtenu de réponse satisfaisante.

P粉107772015
P粉107772015

répondre à tous (2)
P粉505450505

Je pense que chaque fournisseur devrait suivre lesSpécifications

Une implémentation réelle (par exemple V8) peut être un peu complexe, voircette réponsepour commencer. Vous pouvez également vous référer au code source de la v8 dans github, mais il n'est peut-être pas facile d'en comprendre une partie de manière isolée.

Citant la réponse ci-dessus :

Spécification ES2015 :

  1. SoitOToObject (thisvaleur).
  2. ReturnIfAbrupt(O).
  3. Quelensoit ToLength(Get(O,"length")).
  4. ReturnIfAbrupt(len).
  5. Si IsCallable(callbackfn) estfalse, une exceptionTypeErrorest levée.
  6. SithisArgest fourni, laissezTêtrethisArgsinon laissezTêtre indéfini.
  7. SoitAArraySpeciesCreate(O,len).
  8. ReturnIfAbrupt(A).
  9. Queksoit 0.
  10. Répétez pendant queklen
    1. QuePksoit ToString(k).
    2. LaissezkPresentêtre HasProperty(O,Pk).
    3. ReturnIfAbrupt(kPresent).
    4. SikPresentesttrue, alors
      1. QuekValuesoit Get(O,Pk).
      2. ReturnIfAbrupt(kValue).
      3. LaissezmappedValueêtre Call(callbackfn,T, «kValue,k>,ou».
      4. ReturnIfAbrupt(mappedValue).
      5. QueStatesoit CreateDataPropertyOrThrow(A,Pk,mappedValue).
      6. ReturnIfAbrupt(status).
    5. Augmentezkde 1.
  11. Retour àA.
    P粉333395496

    .mapJuste une méthode qui accepte un rappel, appelle le rappel pour chaque élément du tableau et attribue la valeur au nouveau tableau. Cela n'a rien de spécial. Vous pouvez même facilement le faire vous-même :

    Array.prototype.myMap = function(callback) { const newArr = []; for (let i = 0; i < this.length; i++) { newArr.push(callback(this[i], i, this)); } return newArr; } var numbers = [16, 25, 36]; var results = numbers.myMap(Math.sqrt); console.log(results); // [4, 5, 6]
      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!