.map() のような高階関数は JavaScript 内でどのように動作するのでしょうか?
P粉107772015
2023-08-25 17:41:30
<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>
すべてのサプライヤーは 仕様
に従うべきだと思います実際の実装 (V8 など) はもう少し複雑になる可能性があります。まず この回答 を参照してください。 github で v8 ソース コードを参照することもできますが、その一部を単独で理解するのは難しい場合があります。
上記の回答からの引用:
ES2015仕様:
"length"
)) であるとします。を ToString(- k) とします。
kPresent
を HasProperty(- O, Pk) とします。
ReturnIfAbrupt(kPresent
)。 -
kPresent
が - true の場合、
kValue
-
Aを返します。
を Get(- O, Pk) とします。
ReturnIfAbrupt(kValue
)。 -
mappedValue
を Call(- callbackfn, T, «kValue, k >, ## とします。 #または###"。###
ReturnIfAbrupt(mappedValue)。
State- を CreateDataPropertyOrThrow(A,
Pk- , mappedValue) とします。
ReturnIfAbrupt(ステータス)。
-
k を 1 増やします。
.map
は、コールバックを受け取り、配列の各項目に対してコールバックを呼び出し、新しい配列に値を割り当てる単なるメソッドです。それは特別なことではありません。自分で簡単に実装することもできます: