ホームページ  >  に質問  >  本文

.map() のような高階関数は JavaScript 内でどのように動作するのでしょうか?

<p>現在では、誰もがこれらの高次関数を使用して、より少ないコードで有望な結果を得ようとしています。しかし、これらの関数が内部でどのように動作するのか知りたいのです。 </p> <p>同じようなことを書いたとします</p> <p> <pre class="brush:js;toolbar:false;">var 数値 = [16, 25, 36]; var results =numbers.map(Math.sqrt); console.log(results); // [4, 5, 6]</pre> </p> <p>「number」配列の各要素が 1 つずつ反復されることはわかっていますが、<em>どのように</em>? </p> <p>探してみましたが、まだ満足のいく答えが得られていません。 </p>
P粉107772015P粉107772015442日前428

全員に返信(2)返信します

  • P粉505450505

    P粉5054505052023-08-26 14:30:37

    すべてのサプライヤーは 仕様

    に従うべきだと思います

    実際の実装 (V8 など) はもう少し複雑になる可能性があります。まず この回答 を参照してください。 github で v8 ソース コードを参照することもできますが、その一部を単独で理解するのは難しい場合があります。

    上記の回答からの引用:

    ES2015仕様:

    1. O が ToObject(this 値) であるとします。
    2. 突然の場合は戻る(O)。
    3. len が ToLength(Get(O, "length")) であるとします。
    4. ReturnIfAbrupt(len)。
    5. IsCallable(callbackfn) が false の場合、TypeError 例外がスローされます。
    6. thisArg が指定されている場合は、TthisArg にします。それ以外の場合は、T を未定義にします。
    7. A
    8. が ArraySpeciesCreate(O, len) であるとします。 ReturnIfAbrupt(
    9. A
    10. )。
    11. k
    12. を 0 とします。 k
    13. <
    14. len の間繰り返します < Pk
        を ToString(
      1. k) とします。 kPresent
      2. を HasProperty(
      3. O, Pk) とします。 ReturnIfAbrupt(kPresent
      4. )。
      5. kPresent
      6. true の場合、 kValue
          を Get(
        1. O, Pk) とします。 ReturnIfAbrupt(kValue
        2. )。
        3. mappedValue
        4. を Call(
        5. callbackfn, T, «kValue, k >, ## とします。 #または###"。### ReturnIfAbrupt(mappedValue)。
        6. State
        7. を CreateDataPropertyOrThrow(A,
        8. Pk
        9. , mappedValue) とします。 ReturnIfAbrupt(ステータス)。
        10. k を 1 増やします。
      7. Aを返します。

      返事
      0
  • P粉333395496

    P粉3333954962023-08-26 09:51:45

    .map は、コールバックを受け取り、配列の各項目に対してコールバックを呼び出し、新しい配列に値を割り当てる単なるメソッドです。それは特別なことではありません。自分で簡単に実装することもできます:

    リーリー

    返事
    0
  • キャンセル返事