Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula?
Fungsi pesanan yang lebih tinggi dalam JavaScript adalah fungsi yang boleh mengambil fungsi lain sebagai argumen atau fungsi pulangan sebagai hasilnya. Konsep ini adalah asas pengaturcaraan berfungsi dan disokong dalam JavaScript kerana sifatnya sebagai bahasa fungsi kelas pertama. Fungsi pesanan yang lebih tinggi membolehkan pemaju menulis lebih banyak kod abstrak, ringkas, dan boleh diguna semula dengan merangkumi corak dan tingkah laku biasa dalam fungsi yang boleh diguna semula.
Untuk menggambarkan, pertimbangkan contoh mudah fungsi pesanan yang lebih tinggi yang mengambil fungsi sebagai hujah:
<code class="javascript">function applyOperation(operation, num1, num2) { return operation(num1, num2); } let add = function(a, b) { return ab; }; let multiply = function(a, b) { return a * b; }; console.log(applyOperation(add, 5, 3)); // Output: 8 console.log(applyOperation(multiply, 5, 3)); // Output: 15</code>
Dalam contoh ini, applyOperation
adalah fungsi pesanan yang lebih tinggi kerana ia memerlukan fungsi ( operation
) sebagai hujah. Dengan meluluskan fungsi yang berbeza ( add
atau multiply
), kita boleh menggunakan operasi yang berbeza pada nombor tanpa menulis semula struktur fungsi, meningkatkan kesimpulan kod dan kebolehgunaan semula.
Terdapat beberapa fungsi pesanan tinggi terbina dalam JavaScript yang digunakan secara meluas untuk meningkatkan kebolehbacaan kod. Beberapa yang paling biasa termasuk:
Kaedah array seperti map
, filter
, dan reduce
:
map
mengubah setiap elemen array menggunakan fungsi yang disediakan.filter
mencipta array baru dengan unsur -unsur yang lulus ujian yang dilaksanakan oleh fungsi yang disediakan.reduce
menggunakan fungsi terhadap penumpuk dan setiap elemen dalam array (dari kiri ke kanan) untuk mengurangkannya ke satu nilai.<code class="javascript">let numbers = [1, 2, 3, 4]; let doubledNumbers = numbers.map(x => x * 2); // [2, 4, 6, 8] let evenNumbers = numbers.filter(x => x % 2 === 0); // [2, 4] let sum = numbers.reduce((acc, curr) => acc curr, 0); // 10</code>
SetTimeout dan SetInterval:
Fungsi -fungsi ini mengambil fungsi sebagai hujah dan melaksanakannya selepas kelewatan masa yang ditentukan atau pada selang waktu tertentu.
<code class="javascript">setTimeout(() => console.log("Hello after 1 second"), 1000); let intervalId = setInterval(() => console.log("This runs every 2 seconds"), 2000);</code>
Komposisi Fungsi:
Menggabungkan pelbagai fungsi ke dalam fungsi baru, biasanya digunakan dalam perpustakaan seperti Lodash atau dalam pelaksanaan tersuai.
<code class="javascript">const compose = (f, g) => x => f(g(x)); const addOne = x => x 1; const square = x => x * x; const addOneThenSquare = compose(square, addOne); console.log(addOneThenSquare(2)); // Output: 9</code>
Contoh-contoh ini menggambarkan bagaimana fungsi pesanan yang lebih tinggi dapat mengubah operasi kompleks ke dalam blok kod yang lebih mudah dibaca dan dikekalkan.
Fungsi pesanan yang lebih tinggi meningkatkan modulariti dan pemeliharaan dalam aplikasi JavaScript dalam beberapa cara:
Abstraksi dan enkapsulasi:
Fungsi pesanan yang lebih tinggi membolehkan pemaju untuk abstrak operasi atau algoritma biasa, mengurangkan kerumitan bahagian lain di pangkalan kod. Sebagai contoh, dengan menggunakan fungsi pesanan yang lebih tinggi untuk mengendalikan operasi tak segerak, anda boleh merangkumi logik panggil balik, menjadikan fungsi utama lebih jelas dan mudah dikekalkan.
<code class="javascript">function handleAsyncOperation(asyncFn, onSuccess, onError) { asyncFn().then(onSuccess).catch(onError); } handleAsyncOperation(fetchUserData, displayUserData, handleError);</code>
Mengoptimumkan prestasi fungsi pesanan lebih tinggi dalam JavaScript dapat dicapai melalui beberapa teknik:
Memoisasi:
Memoisasi melibatkan caching hasil panggilan fungsi mahal dan mengembalikan hasil cache apabila input yang sama berlaku lagi. Ini boleh menjadi sangat berkesan dengan fungsi-fungsi pesanan yang lebih tinggi yang intensif secara komputasi.
<code class="javascript">function memoize(fn) { const cache = new Map(); return function(...args) { const key = JSON.stringify(args); if (cache.has(key)) { return cache.get(key); } const result = fn.apply(this, args); cache.set(key, result); return result; }; } const memoizedFib = memoize(function(n) { if (n </code>
Menggunakan fungsi anak panah untuk operasi sebaris:
Fungsi anak panah dapat memberikan sedikit peningkatan prestasi disebabkan oleh leksikal sintaks yang mengikat dan lebih pendek this
, yang dapat mengurangkan penggunaan memori dan masa parsing.
<code class="javascript">const numbers = [1, 2, 3, 4, 5]; const squaredNumbers = numbers.map(n => n * n); // Faster than using function(n) { return n * n; }</code>
map
atau filter
, jika hasilnya tidak diperlukan dengan serta -merta, pertimbangkan untuk menggunakan forEach
jika mungkin untuk mengelakkan membuat array baru yang tidak perlu. Currying:
Currying boleh digunakan untuk mengoptimumkan fungsi pesanan yang lebih tinggi dengan mewujudkan fungsi khusus yang boleh digunakan semula dengan hujah-hujah yang digunakan sebahagiannya. Ini boleh membawa kepada prestasi yang lebih baik dengan mengurangkan bilangan hujah fungsi dan meningkatkan penggunaan semula kod.
<code class="javascript">function curry(fn) { return function curried(...args) { if (args.length >= fn.length) { return fn.apply(this, args); } else { return function(...args2) { return curried.apply(this, args.concat(args2)); }; } }; } function add(a, b) { return ab; } const curriedAdd = curry(add); const addFive = curriedAdd(5); console.log(addFive(3)); // Output: 8</code>
Dengan menggunakan teknik ini, pemaju dapat meningkatkan prestasi fungsi pesanan lebih tinggi dalam aplikasi JavaScript.
Atas ialah kandungan terperinci Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!