Tinjauan Mendalam pada Fungsi Perlaksanaan Tunggal dalam JavaScript
Keperluan biasa dalam pengaturcaraan melibatkan penciptaan fungsi yang hanya boleh dilaksanakan sekali . Semasa menggunakan pembolehubah statik dalam bahasa seperti C dan Java mungkin terlintas di fikiran, JavaScript menawarkan alternatif yang elegan: penutupan.
Memahami Penutupan
Penutupan dalam JavaScript ialah fungsi yang mempunyai akses kepada skop fungsi induk mereka, walaupun selepas fungsi induk telah kembali. Dengan menggunakan penutupan, kita boleh mencipta fungsi yang menjejaki sama ada ia telah dilaksanakan sebelum ini.
Pertimbangkan contoh berikut:
<code class="javascript">var something = (function() { var executed = false; return function() { if (!executed) { executed = true; // Do something } }; })(); something(); // "Do something" happens something(); // Nothing happens</code>
Dalam contoh ini, fungsi luar mencipta penutupan sekitar fungsi dalaman. Fungsi dalaman menyemak sama ada bendera yang dilaksanakan ditetapkan kepada palsu, menunjukkan bahawa ia tidak dijalankan sebelum ini. Jika palsu, bendera ditetapkan kepada benar, dan tindakan yang diingini dilaksanakan. Pada panggilan berikutnya, bendera yang dilaksanakan kekal benar, menyebabkan fungsi tidak melakukan apa-apa.
Fungsi Perpustakaan Pihak Ketiga
Pelbagai pustaka JavaScript pihak ketiga, seperti Underscore dan Ramda, menyediakan fungsi utiliti seperti once(). Fungsi ini menerima fungsi lain sebagai hujah dan mengembalikan fungsi yang melaksanakan fungsi yang dibekalkan tepat sekali. Fungsi yang dikembalikan juga menyimpan cache nilai daripada pelaksanaan pertama dan mengembalikannya pada panggilan berikutnya.
Satu pelaksanaan ketara disediakan oleh David Walsh:
<code class="javascript">function once(fn, context) { var result; return function() { if (fn) { result = fn.apply(context || this, arguments); fn = null; } return result; }; }</code>
Fungsi ini mewujudkan penutupan di sekeliling yang dibekalkan fungsi (fn) dan konteks (konteks). Pada pelaksanaan pertama, ia menetapkan hasil kepada nilai pulangan fn dan menetapkan fn kepada null, dengan berkesan menghalang pelaksanaan masa hadapan. Pada panggilan berikutnya, ia hanya mengembalikan hasil cache.
Penggunaan
Menggunakan fungsi satu pelaksanaan ini adalah mudah. Hanya hantar fungsi yang anda ingin laksanakan sekali kepada fungsi utiliti dan fungsi yang dikembalikan boleh dipanggil mengikut keperluan tanpa sebarang kebimbangan tentang pelaksanaan semula.
Sebagai contoh, dengan pelaksanaan David Walsh:
<code class="javascript">function something() { /* Do something */ } var one_something = once(something); one_something(); // "Do something" happens one_something(); // Nothing happens</code>
Kesimpulan
Penutupan dan fungsi utiliti menyediakan cara yang elegan untuk mencipta fungsi satu pelaksanaan dalam JavaScript. Dengan memahami dan menggunakan teknik ini, anda boleh mengendalikan situasi di mana fungsi tertentu harus dilaksanakan sekali sahaja.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Fungsi Yang Melaksanakan Sekali sahaja dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!