Rumah hujung hadapan web tutorial js Javascript ialah fungsi tertib tinggi anda (aplikasi lanjutan)_kemahiran javascript

Javascript ialah fungsi tertib tinggi anda (aplikasi lanjutan)_kemahiran javascript

May 16, 2016 pm 03:54 PM
fungsi pesanan yang lebih tinggi

Dalam bahasa pengaturcaraan biasa, parameter fungsi hanya boleh menjadi jenis asas atau rujukan objek, dan nilai pulangan hanya boleh menjadi jenis data asas atau rujukan objek. Tetapi dalam Javascript, fungsi adalah warga kelas pertama dan boleh diluluskan sebagai parameter atau dikembalikan sebagai nilai pulangan. Fungsi tertib tinggi yang dipanggil ialah fungsi yang boleh mengambil fungsi sebagai parameter atau fungsi sebagai nilai pulangan. Kedua-dua situasi ini mempunyai banyak senario aplikasi dalam pembangunan sebenar Artikel ini adalah ringkasan beberapa senario aplikasi yang saya temui dalam kerja dan pengajian.

Fungsi panggil balik

Penggunaan semula kod adalah salah satu kriteria penting untuk mengukur aplikasi. Dengan mengekstrak logik perniagaan yang diubah dan merangkumnya dalam fungsi panggil balik, kadar penggunaan semula kod boleh dipertingkatkan dengan berkesan. Sebagai contoh, kaedah forEach yang ditambahkan pada tatasusunan dalam ES5 merentasi tatasusunan dan memanggil fungsi yang sama pada setiap elemen.

array = {};
array.forEach = function(arr, fn){
  for (var i = 0, len = arr.length; i < len; i++) {
    fn(arr[i], i, arr);
  }
}
Salin selepas log masuk

Fokuskan fokus perniagaan pada fungsi panggil balik tanpa perlu menulis kod traversal lagi setiap kali.

 Fungsi separa

Sebagai aplikasi biasa untuk mengeluarkan fungsi sebagai nilai pulangan, ia adalah fungsi separa. Apa yang dipanggil fungsi separa merujuk kepada penggunaan mencipta fungsi yang memanggil bahagian-fungsi lain yang parameter atau pembolehubahnya telah dipratetap. Bagaimanapun, melihat definisi, saya tidak faham untuk apa perkara ini. Mari kita lihat contoh dahulu Contoh fungsi separa yang paling tipikal ialah pertimbangan jenis.

Objek JavaScript mempunyai tiga atribut: atribut prototaip, atribut kelas dan kebolehlanjutan. (Pelajar yang tidak tahu harus kembali dan membaca buku Rhino, halaman: 138) Atribut kelas ialah rentetan, yang tidak disediakan secara langsung dalam Javascript, tetapi kita boleh menggunakan Object.prototype.toString untuk mendapatkannya secara tidak langsung. Fungsi ini sentiasa mengembalikan bentuk berikut:

[Kelas objek] 

Jadi kita boleh menulis satu siri fungsi isType.

Kod adalah seperti berikut:

isString = function(obj){
  return Object.prototype.toString.call(obj) === "[object String]";
}
isNumber = function(obj){
  return Object.prototype.toString.call(obj) === "[object Number]";
}
isArray = function(obj){
  return Object.prototype.toString.call(obj) === "[object Array]";
}
Salin selepas log masuk

Kebanyakan kod dalam fungsi ini diulang Pada masa ini, fungsi tertib tinggi membuat penampilan pertama yang cantik:

isType = function(type) {
  return function(obj) {
    return Object.prototype.toString.call(obj) === "[object " + type + "]";
  }
}

isString = isType('String');
isNumber = isType('Number');
isArray = isType('Array');
Salin selepas log masuk

Jadi bentuk mengembalikan fungsi tersuai baharu dengan menyatakan beberapa parameter ialah fungsi separa.

Karipap

Karipap juga dipanggil penilaian separa. Fungsi kari akan mula-mula menerima beberapa parameter Selepas menerima parameter ini, fungsi itu tidak akan menilai serta-merta, tetapi akan terus mengembalikan fungsi lain Parameter yang baru dimasukkan disimpan dalam penutupan yang dibentuk oleh fungsi. Apabila fungsi benar-benar dinilai, semua parameter yang diluluskan akan digunakan untuk penilaian sekaligus.

var currying = function(fn) {
  var args = [];
  
  return function() {
    if (arguments.length === 0) {
      return fn.applay(this, args);
    } else {
      args = args.concat(arguments);
      return arguments.callee;
    }
  }
}
Salin selepas log masuk

Andaikan kita mengambil pengiraan perbelanjaan harian selama sebulan sebagai contoh:

var currying = function(fn) {
debugger;
  var args = [];
  
  return function() {
    if (arguments.length === 0) {
      return fn.apply(this, args);
    } else {
      Array.prototype.push.apply(args, arguments);
      return arguments.callee;
    }
  }
}

cost = function(){
  var sum = 0;
  for (var i = 0, len = arguments.length; i < len; i++) {
    sum += arguments[i];
  }
  
  return sum;
}
var cost = currying(cost);

cost(100);
cost(200);
alert(cost())
Salin selepas log masuk

Pendikitan acara

Dalam sesetengah senario, peristiwa tertentu mungkin dicetuskan berulang kali, tetapi fungsi pemprosesan acara tidak perlu dilaksanakan setiap kali. Sebagai contoh, pengiraan logik yang kompleks dilakukan dalam peristiwa tetingkap.ubah saiz Jika pengguna kerap menukar saiz penyemak imbas, pengiraan yang kompleks akan memberi kesan yang serius kepada prestasi kadangkala pengiraan logik ini tidak perlu dicetuskan setiap kali rezise berlaku dan hanya pengiraan terhad diperlukan beberapa kali. Pada masa ini kita perlu mengabaikan beberapa permintaan acara berdasarkan tempoh masa. Lihat fungsi pendikit berikut:

function throttle(fn, interval) {
   var doing = false;

   return function() {
    if (doing) {
     return;
    }
    doing = true;
    fn.apply(this, arguments);
    setTimeout(function() {
     doing = false;
    }, interval);
   }
  }
  
  window.onresize = throttle(function(){
    console.log('execute');
  }, 500);
Salin selepas log masuk

Dengan mengawal masa pelaksanaan fungsi, anda boleh mencapai keseimbangan sempurna antara bilangan pelaksanaan fungsi dan keperluan fungsian. Peristiwa lain ialah mousemove. Jika kita mengikat acara ini pada elemen DOM, peristiwa itu akan dicetuskan berulang kali apabila tetikus bergerak ke atas elemen tersebut.

Acara sudah tamat

Untuk beberapa acara yang boleh dicetuskan dengan kerap, kadangkala kami ingin melakukan beberapa siri operasi selepas acara itu tamat. Pada masa ini kita boleh menggunakan fungsi tertib lebih tinggi untuk melakukan pemprosesan berikut:

function debounce(fn, interval) {
  var timer = null;

 function delay() {
  var target = this;
  var args = arguments;
  return setTimeout(function(){
   fn.apply(target, args);
  }, interval);
 }

 return function() {
  if (timer) {
   clearTimeout(timer);
  }

  timer = delay.apply(this, arguments);
 }
};
window.onresize = throttle(function(){
  console.log('resize end');
}, 500);
Salin selepas log masuk

Jika acara dicetuskan semasa proses ini, kosongkan pemegang acara terakhir dan ikat semula masa pelaksanaan.

Rujukan:

《Penjelasan mendalam tentang nod》

"Corak Reka Bentuk Javascript dan Amalan Pembangunan"

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Muzium Dua Point: Semua Pameran dan Di Mana Mencari Mereka
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melakukan pengaturcaraan berfungsi dengan PHP Bagaimana untuk melakukan pengaturcaraan berfungsi dengan PHP Jun 06, 2023 am 08:21 AM

PHP ialah bahasa sebelah pelayan yang digunakan secara meluas Salah satu sebab mengapa ramai pembangun web suka menggunakan PHP ialah perpustakaan fungsinya yang kaya dan sintaks fungsi yang ringkas dan mudah digunakan. Pengaturcaraan fungsional ialah paradigma pengaturcaraan yang merangkum data dan tingkah laku dengan baik, menjadikan kod lebih modular dan lebih mudah untuk diselenggara dan diuji. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP untuk pengaturcaraan berfungsi. Asas Pengaturcaraan Fungsional Idea teras pengaturcaraan berfungsi adalah untuk menganggap fungsi sebagai warga kelas pertama Fungsi itu sendiri boleh diluluskan, dikembalikan, dan terdiri seperti pembolehubah.

Bagaimana untuk mencipta fungsi peringkat tinggi dalam Python? Bagaimana untuk mencipta fungsi peringkat tinggi dalam Python? Sep 05, 2023 pm 07:29 PM

Dalam Python, fungsi yang mengambil fungsi lain sebagai hujah atau mengembalikan fungsi sebagai output dipanggil fungsi tertib lebih tinggi. Mari lihat ciri-cirinya - fungsi boleh disimpan dalam pembolehubah. Fungsi ini boleh dihantar sebagai parameter kepada fungsi lain. Fungsi tertib tinggi boleh disimpan dalam bentuk senarai, jadual cincang, dsb. Fungsi boleh dikembalikan daripada fungsi. Mari kita lihat beberapa contoh − Berfungsi sebagai objek Terjemahan Bahasa Cina Contoh ialah: Contoh Dalam contoh ini, fungsi ini dianggap sebagai objek. Di sini, fungsi demo() diberikan kepada pembolehubah - #Creatingafunctiondefdemo(mystr):returnmystr.swapcase()#swappingthecase

Fungsi Anak Panah PHP: Cara mengendalikan panggilan bersarang ke fungsi tertib lebih tinggi Fungsi Anak Panah PHP: Cara mengendalikan panggilan bersarang ke fungsi tertib lebih tinggi Sep 13, 2023 am 08:27 AM

Fungsi anak panah PHP: Cara mengendalikan panggilan bersarang bagi fungsi tertib tinggi, contoh kod khusus diperlukan Pengenalan: Dalam versi 7.4 PHP, konsep fungsi anak panah (fungsi anak panah) telah diperkenalkan dengan cara yang ringkas dan boleh diproses dengan elegan. Artikel ini akan memperkenalkan penggunaan asas fungsi anak panah dan menunjukkan cara mengendalikan panggilan bersarang bagi fungsi peringkat tinggi melalui contoh kod tertentu. 1. Apakah fungsi anak panah? Fungsi anak panah ialah ciri baharu yang diperkenalkan dalam versi PHP7.4 Ia adalah a

Apakah fungsi peringkat tinggi dalam Python? Apakah fungsi peringkat tinggi dalam Python? Nov 10, 2023 pm 04:42 PM

Fungsi tertib tinggi termasuk map(), filter(), reduce(), fungsi lambda, partial(), dsb. Pengenalan terperinci: 1. map(): Fungsi terbina dalam ini menerima fungsi dan satu atau lebih objek boleh lelar sebagai input, dan kemudian mengembalikan lelaran yang menggunakan fungsi input pada setiap elemen objek boleh lelar; Fungsi terbina dalam ini mengambil fungsi dan objek boleh lelar sebagai input, dan mengembalikan lelaran yang menghasilkan elemen tersebut yang menyebabkan fungsi input mengembalikan True, dsb.

Fungsi tertib tinggi dalam Python Fungsi tertib tinggi dalam Python Sep 13, 2023 pm 06:53 PM

Pengenalan kepada Python's World of Higher-Order Functions Jika anda ingin meningkatkan kemahiran pengaturcaraan Python anda dan menjana kod yang lebih ekspresif dan cekap, anda telah datang ke tempat yang betul. Fungsi dalam Python adalah lebih daripada sekadar blok kod khusus. Ia juga merupakan perkara yang berkuasa yang boleh dialihkan, dipindahkan, dan juga dijana secara dinamik. Fungsi tertib tinggi meningkatkan kepelbagaian ini dengan memproses fungsi lain. Artikel ini akan membincangkan secara meluas prinsip fungsi peringkat tinggi. Kami akan meneroka asas proses sebagai objek kelas pertama, menyelami contoh dunia sebenar bagi fungsi tertib tinggi dan menggalakkan kuasa fungsi lambda untuk kod yang jelas dan cantik. Model pengaturcaraan berfungsi dan kelebihannya apabila digunakan dalam Python juga akan dibincangkan. Selepas membaca artikel ini, anda akan mempunyai pemahaman yang kukuh tentang fungsi tertib tinggi dan mengetahui

Bagaimana untuk memahami fungsi peringkat tinggi jenis fungsi dalam Golang? Bagaimana untuk memahami fungsi peringkat tinggi jenis fungsi dalam Golang? Apr 20, 2024 am 11:54 AM

Fungsi peringkat tinggi Golang menerima dan mengembalikan fungsi. Mereka terbahagi kepada dua kategori: menerima fungsi sebagai parameter: memproses fungsi lain atau melaksanakan program dinamik. Kembalikan fungsi sebagai nilai pulangan: Buat dan kembalikan fungsi yang boleh disimpan dan dilaksanakan kemudian.

Analisis senario aplikasi fungsi peringkat tinggi di Golang Analisis senario aplikasi fungsi peringkat tinggi di Golang May 17, 2023 pm 05:40 PM

Dengan populariti dan perkembangan bahasa Golang, semakin ramai pembangun mula cuba menggunakan idea pengaturcaraan berfungsi. Fungsi tertib tinggi di Golang membawa kemudahan besar kepada pengaturcaraan berfungsi dan digunakan secara meluas dalam pembangunan sebenar. Jadi, apakah senario aplikasi fungsi tertib tinggi di Golang? Seterusnya, kami akan menganalisis ini. Pemprosesan parameter fungsi dan nilai pulangan Di Golang, fungsi boleh digunakan sebagai parameter fungsi lain atau mengembalikan fungsi. Ini bermakna kita boleh menghantar fungsi sebagai parameter kepada yang lain

Artikel untuk membantu anda memahami fungsi peringkat tinggi Python Artikel untuk membantu anda memahami fungsi peringkat tinggi Python Jul 25, 2023 pm 04:07 PM

Fungsi tertib tinggi ialah fungsi fungsi yang sangat berguna dalam Python Fungsi tertib tinggi yang dipanggil adalah fungsi yang boleh digunakan untuk menerima fungsi lain sebagai parameter.

See all articles