Rumah > Artikel > hujung hadapan web > Bagaimana untuk mengulangi fungsi ke kedalaman n dalam JavaScript?
Dalam JavaScript, fungsi dianggap "kari" jika ia menerima satu atau lebih parameter dan mengembalikan fungsi baharu yang mengambil baki parameter. Karipap ialah teknik berkuasa yang boleh digunakan untuk mencipta fungsi baharu daripada fungsi sedia ada, atau "kari" fungsi kedalaman n.
Terdapat banyak sebab mengapa anda mungkin ingin uncurry fungsi tertentu. Sebagai contoh, anda mungkin mahu -
Gunakan fungsi kari dalam konteks yang memerlukan fungsi tidak kari
Tukar fungsi kari kepada bentuk bukan kari untuk memudahkan membaca atau nyahpepijat
Optimumkan prestasi fungsi kari
Terdapat dua kaedahFungsi karipap -
Kaedah pertama ialah menggunakan kaedah "Function.prototype.apply".
Kaedah kedua ialah menggunakan kaedah "Function.prototype.call".
Kaedah "Function.prototype.apply" boleh digunakan untuk menyimpan fungsi kedalaman n. Untuk melakukan ini, anda hanya perlu menghantar nilai "ini" dan tatasusunan parameter kepada kaedah "terapkan" . Contohnya -
<!doctype html> <html> <head> <title>Examples</title> </head> <body> <p>uncurry up to depth 2 using Function apply() method</p> <div id="result"></div> <script> function add(a, b) { return a + b; } function curriedAdd(a) { return function(b) { return a + b; } } // Uncurry the "curriedAdd" function up to depth 2: document.getElementById("result").innerHTML = curriedAdd.apply(null, [1]).apply(null, [2]); // 3 </script> </body> </html>
"Function.prototype.call" juga boleh digunakan untuk menguraikan fungsi ke dalam n. Kaedah "panggilan" adalah serupa dengan kaedah "terapkan" , tetapi anda lulus nilai "ini" dan hujah kepada "panggilan" #🎜 🎜# i > Kaedah sebagai parameter individu, bukan sebagai tatasusunan. Contohnya -
<!doctype html> <html> <head> <title>Examples</title> </head> <body> <p> uncurry up to depth 2 using Function call() method</p> <div id="result"></div> <script> function add(a, b) { return a + b; } function curriedAdd(a) { return function(b) { return parseInt(a) + parseInt(b); } } // Uncurry the "curriedAdd" function up to depth 2: document.getElementById("result").innerHTML = curriedAdd.call(null, [1]).call(null, [2]); // 3 </script> </body> </html>Dalam contoh di atas, kami menggunakan kaedah
"panggilan" untuk mengari fungsi "curriedAdd". Seperti yang anda lihat, kaedah "call" adalah lebih bertele-tele sedikit daripada kaedah "apply", tetapi ia mempunyai kesan yang sama.
Apakah faedah menggunakan kaedah "Function.prototype.apply"?Menggunakan kaedah "Function.prototype.apply" untuk membatalkan rujukan fungsi mempunyai beberapa faedah -
Atas ialah kandungan terperinci Bagaimana untuk mengulangi fungsi ke kedalaman n dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!