cari
Rumahhujung hadapan webtutorial jsJavascript ialah fungsi tertib tinggi anda (aplikasi lanjutan)_kemahiran javascript

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);
  }
}

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]";
}

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');

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;
    }
  }
}

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())

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);

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);

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
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
如何使用PHP进行函数式编程如何使用PHP进行函数式编程Jun 06, 2023 am 08:21 AM

PHP是一种广泛使用的服务器端语言,许多Web开发人员喜欢使用PHP的原因之一是它丰富的函数库和简单易用的函数语法。而函数式编程则是一种程序设计范式,它良好地封装数据和行为,使得代码更加模块化,易于维护和测试。在这篇文章中,我们将介绍如何使用PHP进行函数式编程。函数式编程基础函数式编程的核心思想是将函数视为一等公民,函数本身可以像变量一样被传递、返回和组合

如何在Python中创建高阶函数?如何在Python中创建高阶函数?Sep 05, 2023 pm 07:29 PM

在Python中,将另一个函数作为参数或将函数作为输出返回的函数被称为高阶函数。让我们来看看其特性-该函数可以存储在变量中。该函数可以作为参数传递给另一个函数。高阶函数可以以列表、哈希表等形式存储函数可以从函数中返回。让我们来看一些例子−函数作为对象Example的中文翻译为:示例在这个例子中,这些函数被视为对象。在这里,函数demo()被赋值给一个变量-#Creatingafunctiondefdemo(mystr):returnmystr.swapcase()#swappingthecase

python高阶函数有哪些python高阶函数有哪些Nov 10, 2023 pm 04:42 PM

高阶函数有map()、filter()、reduce()、lambda函数、partial()等。详细介绍:1、map():这个内置函数接受一个函数和一个或多个可迭代对象作为输入,然后返回一个将输入函数应用于可迭代对象的每个元素的迭代器;2、filter():这个内置函数接受一个函数和一个可迭代对象作为输入,然后返回一个迭代器,该迭代器产生那些使得输入函数返回True的元素等等

PHP 箭头函数:如何处理高阶函数的嵌套调用PHP 箭头函数:如何处理高阶函数的嵌套调用Sep 13, 2023 am 08:27 AM

PHP箭头函数:如何处理高阶函数的嵌套调用,需要具体代码示例引言:在PHP7.4版本中,引入了箭头函数(arrowfunctions)的概念,箭头函数是一种简洁的写法,能够优雅地处理高阶函数的嵌套调用。本文将介绍箭头函数的基本使用方法,并通过具体代码示例演示如何处理高阶函数的嵌套调用。一、什么是箭头函数?箭头函数是PHP7.4版本引入的新特性,它是一

在Python中的高阶函数在Python中的高阶函数Sep 13, 2023 pm 06:53 PM

简介Python的高阶函数世界如果您想提高Python编程能力并生成更具表现力和更有效的代码,那么您来对地方了。Python中的函数不仅仅是专门的代码块。它们也是可以移动、转移、甚至动态生成的强大东西。通过处理其他函数,高阶函数增强了这种多功能性。本文将广泛讨论高阶函数的原理。我们将探索作为一流对象的进程的基础知识,深入研究高阶函数的现实世界示例,并鼓励lambda函数的功能以实现清晰而美观的代码。还将讨论函数式编程模型及其在Python中使用时的优点。读完本文后,您将牢牢掌握高阶函数,并且知道

Golang函数的高阶函数应用场景分析Golang函数的高阶函数应用场景分析May 17, 2023 pm 05:40 PM

随着Golang语言的流行和发展,越来越多的开发者开始尝试使用函数式编程的思想。Golang中的高阶函数为函数式编程带来了很大的便利性,并且在实际开发中应用广泛。那么,Golang函数的高阶函数应用场景是什么呢?接下来,我们将对此进行分析。函数参数和返回值的处理在Golang中,函数可以作为其他函数的参数或返回函数。这就意味着我们可以将函数作为一个参数传入另

如何理解 Golang 中函数类型的高阶函数?如何理解 Golang 中函数类型的高阶函数?Apr 20, 2024 am 11:54 AM

Golang高阶函数可接受和返回函数。它们分两类:接收函数作为参数:处理其他函数或执行动态程序。返回函数作为返回值:创建和返回可存储和后期执行的函数。

一篇文章带你了解Python高阶函数一篇文章带你了解Python高阶函数Jul 25, 2023 pm 04:07 PM

高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数。

See all articles

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)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.