Beberapa minggu yang lalu, saya memposting posting Weibo yang mengatakan bahwa saya suka fungsi yang mengembalikan fungsi. Beberapa balasan segera muncul, pada dasarnya semuanya ... apa? Lai Untuk seorang programmer, memahami fungsi yang mengembalikan fungsi adalah keterampilan yang sangat penting. Menggunakannya Anda dapat menyimpan banyak kode, membuat JavaScript lebih efisien, dan membiarkan Anda lebih memahami kekuatan JavaScript. Di bawah ini adalah beberapa contoh sederhana yang saya tulis, di mana Anda dapat memahami apa yang saya maksud.
Misalkan Anda memiliki objek yang berisi dua objek anak, dan mereka semua memiliki metode GET. Kedua metode ini sangat mirip dan sedikit berbeda:
var accessors = {sortable: {get: function () {return typeof this.getAttribute ('sortable')! = 'tidak terdefinisi'; }}, droppable: {get: function () {return typeof this.getAttribute ('droppable')! = 'tidak terdefinisi'; }}};Kode berulang bukanlah fenomena yang baik, jadi kita perlu membuat fungsi eksternal dan menerima nama properti:
function getAttribute (attr) {return typeof this.getAttribute (attr)! = 'undefined';} var accessors = {sortable: {get: function () {return getAttribute ('sortable'); }}, droppable: {get: function () {return getAttribute ('droppable'); }}};Ini jauh lebih baik, tetapi masih belum sempurna karena masih ada beberapa bagian yang berlebihan. Cara yang lebih baik adalah membiarkannya secara langsung mengembalikan fungsi yang Anda butuhkan pada akhirnya - ini akan menghilangkan eksekusi fungsi yang berlebihan:
fungsi generateGetMethod (attr) {return function () {return typeof this.getAttribute (attr)! = 'undefined'; };}var accessors = { sortable: { get: generateGetMethod('sortable') }, droppable: { get: generateGetMethod('droppable') }};/* It is completely equivalent to the original method: */var accessors = { sortable: { get: function() { return typeof this.getAttribute('sortable') != 'undefined'; }}, droppable: {get: function () {return typeof this.getAttribute ('droppable')! = 'tidak terdefinisi'; }}};*/Apa yang Anda lihat di atas adalah fungsi yang mengembalikan fungsi; Setiap objek anak memiliki metode GET sendiri, tetapi fungsi eksekusi bersarang yang tidak perlu dihapus.
Ini adalah teknik yang sangat berguna yang dapat membantu Anda menghilangkan duplikasi kode serupa. Jika digunakan dengan benar, itu dapat membuat kode Anda lebih mudah dibaca dan lebih mudah dipelihara!
Apakah kamu mengerti?