.map() のような高階関数は JavaScript 内でどのように動作するのでしょうか?
P粉107772015
P粉107772015 2023-08-25 17:41:30
0
2
468
<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粉107772015
P粉107772015

全員に返信(2)
P粉505450505

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

に従うべきだと思います

実際の実装 (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. 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

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

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート