Bagaimanakah fungsi tertib tinggi seperti .map() berfungsi dalam JavaScript?
P粉107772015
P粉107772015 2023-08-25 17:41:30
0
2
362

Pada masa kini semua orang cuba menggunakan fungsi tertib tinggi ini untuk mendapatkan hasil yang menjanjikan dengan menulis kod yang lebih sedikit. Tetapi saya ingin tahu bagaimana fungsi ini berfungsi secara dalaman.

Andaikan saya menulis sesuatu yang serupa

var numbers = [16, 25, 36]; var keputusan = numbers.map(Math.sqrt); console.log(hasil); // [4, 5, 6]

Saya tahu bahawa setiap elemen tatasusunan "nombor" diulang satu demi satu, tetapi bagaimana?

Saya cuba mencarinya tetapi masih belum mendapat jawapan yang memuaskan.

P粉107772015
P粉107772015

membalas semua (2)
P粉505450505

Saya rasa setiap pembekal harus mengikutSpesifikasi

Pelaksanaan sebenar (cth. V8) boleh menjadi agak rumit, lihatjawapan inisebagai permulaan. Anda juga boleh merujuk kepada kod sumber v8 dalam github, tetapi mungkin tidak mudah untuk memahami sebahagian daripadanya secara berasingan.

Memetik jawapan di atas:

Spesifikasi ES2015:

  1. BiarOmenjadi ToObject(nilaiini).
  2. ReturnIfAbrupt(O).
  3. Biarlenmenjadi ToLength(Dapatkan(O,"length")).
  4. ReturnIfAbrupt(len).
  5. Jika IsCallable(callbackfn) adalahfalse, pengecualianTypeErrorakan dilemparkan.
  6. JikaArgini disediakan, biarkanTmenjadiArg ini; sebaliknya biarkanTtidak ditentukan.
  7. BiarAmenjadi ArraySpeciesCreate(O,len).
  8. ReturnIfAbrupt(A).
  9. Biarkmenjadi 0.
  10. Ulang sementaraklen
    1. BiarPkmenjadi ToString(k).
    2. BiarkPresentmenjadi HasProperty(O,Pk).
    3. ReturnIfAbrupt(kPresent).
    4. JikakPresentadalahbenar, maka
      1. BiarkValuemenjadi Get(O,Pk).
      2. ReturnIfAbrupt(kValue).
      3. BiarMappedValuemenjadi Panggilan(callbackfn,T, «kValue,k>,atau».
      4. ReturnIfAbrupt(mappedValue).
      5. BiarNyatakanmenjadi CreateDataPropertyOrThrow(A,Pk,mappedValue).
      6. ReturnIfAbrupt(status).
    5. Tingkatkanksebanyak 1.
  11. Kembali keA.
    P粉333395496

    .mapHanya kaedah yang menerima panggilan balik, memanggil panggilan balik untuk setiap item tatasusunan dan memberikan nilai kepada tatasusunan baharu. Ia tidak istimewa. Anda juga boleh melakukannya sendiri dengan mudah:

    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]
      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!