Bagaimanakah Saya Boleh Mencipta Fungsi Yang Melaksanakan Sekali sahaja dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-10-22 22:55:02
asal
551 orang telah melayarinya

How Can I Create Functions That Execute Only Once in JavaScript?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!