Fungsi JavaScript
Fungsi JavaScript mampu lebih daripada sekadar melampirkan sekumpulan kod sambil menunggu panggilan untuk dilaksanakan. Fungsi telah berkembang dari semasa ke semasa yang membawa kepada definisi baru, kaedah pelaksanaan dan sintaks. Jawatan ini akan merangkumi sebahagian daripada peranan sekarang Fungsi JavaScript telah dimainkan setakat ini.
Mengetahui cara yang berbeza untuk menyatakan dan menentukan fungsi membuka kemungkinan melaksanakan logik dengan cara yang lebih optimum dalam JavaScript. Juga, anda mungkin dapat menjawab soalan wawancara dengan lebih mudah.
Ekspresi Fungsi
Apabila anda hanya menyatakan fungsi dengan fungsi
kata kunci, parameter pilihan dan kod tubuh, itu a fungsi pengisytiharan.
Letakkan perisytiharan tersebut dalam ungkapan JavaScript (seperti dalam penyataan atau ungkapan aritmetik), ia menjadi fungsi ungkapan.
// Fungsi fungsi perisytiharan function_name () ; // Ungkapan fungsi var function_name = function () ;
Semua pengisytiharan JavaScript dinaikkan (dimajukan dalam skop) semasa penilaian. Oleh itu menulis panggilan fungsi sebelum deklarasi fungsi adalah okay (kerana perisytiharan akan dipindahkan juga).
function_name (); // function call [WORKS] function_name () ;
Ekspresi fungsi bagaimanapun tidak digerakkan kerana fungsi menjadi sebahagian daripada ekspresi dan bukan pernyataan yang bersendirian.
function_name (); // function call [TIDAK AKAN BEKERJA] var function_name = function () ;
Ekspresi Fungsi Segera Dihadapkan (IIFE)
Ia merupakan ungkapan fungsi, kod yang akan dilaksanakan dengan serta-merta (hanya sekali apabila ia dinilai). Anda boleh membuat satu dengan hanya menambah ()
(sintaks yang digunakan untuk memanggil fungsi) sejurus selepas ungkapan fungsi. Mereka boleh menjadi tanpa nama (tiada nama untuk memanggilnya dengan).
Berikut adalah dua sintaks yang paling umum untuk membuat IIFE:
(function optional_function_name () // body ());
dan
(function optional_function_name () // body) ();
Sangkar sekitar perisytiharan fungsi menukarnya kepada ungkapan dan kemudian menambah ()
selepas ia memanggil fungsi. Anda boleh menggunakan cara lain untuk membuat IIFE selama anda menambah ()
selepas ungkapan fungsi (seperti di bawah), tetapi kaedah pilihan adalah dua di atas.
/ Beberapa cara untuk membuat fungsi IIFEs! () / * ... * / (); + fungsi () / * ... * / (); fungsi baru () / * ... * /;
IIFE adalah sesuai untuk menulis kod yang perlu dilaksanakan hanya sekali, namespacing, membuat penutupan, membuat pemboleh ubah peribadi dan banyak lagi. Berikut adalah contoh penggunaan IIFE.
var page_language = (function () var lang; // Code to get language of the page return lang;) ();
Kod untuk mendapatkan bahasa halaman dilaksanakan hanya sekali (sebaiknya selepas memuatkan halaman). Hasilnya disimpan dalam page_language
untuk kegunaan kemudian.
Kaedah
Apabila fungsi adalah objek objek, ia dipanggil kaedah. Oleh kerana fungsi juga merupakan objek, fungsi dalam fungsi lain juga merupakan kaedah. Berikut adalah contoh untuk kaedah di dalam objek.
var calc = add: function (a, b) return a + b, sub: function (a, b) return a-b console.log (calc.add (1,2)); // 3 console.log (calc.sub (80,2)); // 78
The Tambah
dan sub
fungsi adalah kaedah calc
objek.
Sekarang untuk fungsi dalam contoh fungsi:
fungsi tambah (a) return function (b) return a + b; console.log (add (1) (2)); // Output ialah 3
Fungsi anonim yang dikembalikan adalah kaedah fungsi Tambah
.
Nota: Oleh kerana parameter (a
) fungsi Tambah
dalam contoh di atas boleh didapati untuk fungsi berikut yang diminta, jenis proses ini dipanggil kari.
Pembina
Apabila anda menambah baru
kata kunci sebelum fungsi dan memanggilnya, ia menjadi pembina yang mewujudkan contoh. Berikut adalah contoh di mana para pembina digunakan untuk membuat contoh Buah
dan nilai ditambah kepada setiap Buah
hartanah.
fungsi Buah () nama var, keluarga; // Nama saintifik & keluarga ini.getName = fungsi () return name;; this.setName = function (value) name = value; this.getFamily = function () return family;; this.setFamily = function (value) family = value; var apple = buah baru (); apple.setName ("Malus domestica"); apple.setFamily ("Rosaceae"); var orange = buah baru (); orange.setName ("Citrus à ??  ?? â ??  ?? sinensis "); orange.setFamily (" Rutaceae "); console.log (orange.getName ()); //" Citrus à ??  ?? â ??  ?? sinensis "console.log (apple.getName ()); //" Malus domestica "console.log (orange.getFamily ()); //" Rutaceae "
Fungsi Panah (Standard ES6) [Hanya di Firefox]
Takrif fungsi baru dari Standard ES6 menyediakan sintaks yang lebih pendek untuk ungkapan fungsi. Sintaksnya ialah
() => / * body * /
Fungsi sampel ini:
var sing = function () console.log ('singing ...');
adalah sama seperti:
var sing = () => console.log ('singing ...');
Fungsi panah tidak dikenali dan tidak mempunyai sendiri ini
nilai, ini
di dalamnya akan sama seperti ini
dalam kod tertutup. Juga, anda tidak boleh mengubahnya kepada pembina dengan baru
kata kunci.
Mereka berguna apabila anda mahu ini
di dalam fungsi untuk menjadi sama seperti di luar dan sintaks yang lebih pendek menjadikan kod untuk fungsi penulisan dalam fungsi ringkas (seperti di bawah)
setInterval (function () console.log ('message'), 1000);
ke dalam
setInterval (() => console.log ('message'), 1000);
Fungsi Penjana (Standard ES6) [Hanya di Firefox]
Satu lagi definisi fungsi baru dari Standard ES6 ialah Fungsi Penjana. Fungsi penjana mampu menghentikan dan meneruskan pelaksanaannya. Sintaksnya ialah:
fungsi * function_name ()
atau
fungsi * function_name ()
Fungsi Generator membuat iterators. Iterator itu seterusnya
kaedah kemudian digunakan untuk melaksanakan kod di dalam fungsi penjana sehingga hasil
kata kunci dicapai. Selepas itu, nilai terulang yang dikenalpasti oleh hasil
Kata kunci dikembalikan oleh fungsi penjana dan pelaksanaan dihentikan.
Fungsi penjana sekali lagi dilaksanakan apabila seterusnya
kaedah dipanggil sehingga seterusnya hasil
kata kunci dicapai. Setelah semua hasil
ungkapan dilaksanakan, pulangan nilai yang dihasilkan undefined
.
Berikut adalah contoh mudah:
fungsi * generator_func (count) untuk (var i = 0; iBerikut adalah contoh lain:
fungsi * randomIncrement (i) hasil i + 3; hasil i + 5; hasil i + 10; hasil i + 6; var itr = randomIncrement (4); console.log (itr.next (). nilai); // 7 console.log (itr.next (). Nilai); // 9 console.log (itr.next (). Nilai); // 14Terdapat juga a
hasil *
ungkapan yang melepasi nilai kepada fungsi penjana yang lainfungsi * buah-buahan (buah) hasil * sayur-sayuran (buah); menghasilkan "Anggur"; fungsi * sayur-sayuran (buah) hasil buah + "dan Bayam"; hasil buah + "dan Brokoli"; buah buah + "dan Timun"; var itr = buah ("Apple"); console.log (itr.next (). nilai); / / "Apple and Spinach" console.log (itr.next (). Nilai); / / "Apple and Broccoli" console.log (itr.next (). Nilai); / / "Apple and Cucumber" console.log (itr.next (). Nilai); / // "Grapes" console.log (itr.next (). Nilai); / undefinedFungsi penjana adalah berguna jika anda mahu melalui nilai-nilai satu demi satu pada titik pilihan anda dalam kod dengan menghentikannya, daripada dalam satu pergi seperti dalam melambangkan array.
Kesimpulannya
Saya telah memasukkan senarai rujukan di bawah, di mana anda akan menemui pautan kepada rujukan dan artikel yang mendalam dengan topik yang berbeza secara berasingan. Kedua-dua fungsi standard ES6 hanya akan berfungsi di Firefox pada masa ini.
Rujukan
- Bahasa ECMAScript: Fungsi dan Kelas
- Ekspresi Fungsi Segera-Invoked (IIFE)
- Asas-asas Penjana ES6
- Fungsi Arrow
- Fungsi - Rangkaian Pembangun Mozilla