Menyambung artikel sebelumnya "Cara Menulis Kod JS Berkualiti Tinggi", kali ini saya akan menyusun titik pengetahuan tentang fungsi javascript.
2. Gunakan fungsi
Fungsi menyediakan pengaturcara dengan fungsi abstrak utama dan mekanisme pelaksanaan. Fungsi boleh melaksanakan secara bebas beberapa ciri berbeza dalam bahasa lain, seperti prosedur, kaedah, pembina, dan juga kelas atau modul.
2.1 Memahami perbezaan antara panggilan fungsi, panggilan kaedah dan panggilan pembina
Untuk pengaturcaraan berorientasikan objek, fungsi, kaedah dan pembina kelas ialah tiga konsep yang berbeza.
Mod penggunaan:
1, panggilan fungsi
2, panggilan kaedah
Pembolehubah ini terikat pada objek kerana kaedah helo ditakrifkan dalam objek obj Kami juga boleh menetapkan rujukan fungsi yang sama kepada objek lain dan mendapatkan jawapan yang sama.
3, pembina menggunakan
Menggunakan operator baharu untuk memanggil Pengguna dianggap sebagai pembina.
Berbeza daripada panggilan fungsi dan panggilan kaedah, panggilan pembina menggunakan objek baharu sebagai nilai pembolehubah ini dan secara tersirat mengembalikan objek baharu ini sebagai hasil panggilan. Tanggungjawab utama pembina adalah untuk memulakan objek baru ini.
2.2 Mahir dalam fungsi tertib tinggi
Fungsi tertib tinggi tidak lebih daripada fungsi yang mengambil fungsi sebagai parameter atau mengembalikan nilai Mengambil fungsi sebagai parameter (sering dipanggil fungsi panggil balik kerana fungsi tertib tinggi "kemudian memanggilnya" adalah. cara yang sangat berkuasa dan ekspresif untuk Idiom juga digunakan secara meluas dalam program js.
Pertimbangkan kaedah isihan standard untuk tatasusunan Untuk berfungsi untuk semua tatasusunan, kaedah isih memerlukan pemanggil memutuskan cara membandingkan mana-mana dua elemen dalam tatasusunan.
Contoh di atas dipermudahkan lagi menggunakan fungsi tanpa nama.
Belajar menggunakan fungsi tertib tinggi selalunya memudahkan kod dan menghapuskan kod boilerplate yang membosankan. Kita boleh menggunakan gelung untuk melaksanakan penukaran mudah tatasusunan rentetan:
Menggunakan kaedah peta mudah tatasusunan boleh menghapuskan gelung dan hanya menggunakan fungsi setempat untuk menukar elemen satu demi satu.
Selain itu, sebagai contoh, kami ingin mencipta beberapa kaedah untuk mencipta rentetan yang berbeza, dengan logik pelaksanaan biasa, dan setiap gelung mencipta rentetan dengan menggabungkan hasil pengiraan setiap bahagian bebas.
Ini membolehkan pembaca mempunyai pemahaman yang lebih jelas tentang perkara yang boleh dilakukan oleh kod tanpa pergi ke butiran pelaksanaan.
Catatan
javascript mengembalikan formula untuk nombor rawak dalam julat yang ditentukan (antara m-n): Math.random()*(n-m) m
Pada masa yang sama, beri perhatian kepada keperluan soalan dan sama ada ia diperlukan untuk mengembalikan integer positif
2.3 Mod Panggilan
Memanggil fungsi akan menjeda pelaksanaan fungsi semasa dan menghantar kawalan serta parameter kepada fungsi baharu. Sebagai tambahan kepada parameter formal yang ditakrifkan pada pengisytiharan, setiap fungsi menerima dua parameter tambahan baharu: ini dan hujah.
Ini adalah parameter yang sangat penting, dan nilainya ditentukan oleh mod panggilan.
Berikut ialah 4 corak panggilan penting dalam JavaScript:
a. corak seruan kaedah
b. corak seruan fungsi
c. corak seruan pembina
d. Terapkan corak permohonan
Mod ini berbeza dalam cara untuk memulakan parameter utama ini
1. Kaedah kaedah seruan
Apabila fungsi berfungsi sebagai kaedah objek, kami memanggil fungsi itu kaedah. Apabila kaedah dipanggil, ini terikat pada objek panggilan.
Ringkasan:
1. Kaedah yang boleh mendapatkan konteks objek yang mereka miliki melalui ini dipanggil kaedah awam
2. Apabila menggunakan . atau ungkapan subskrip untuk menggunakan fungsi, ia adalah mod panggilan kaedah, dan objek ini terikat pada objek sebelumnya.
3. Fungsi boleh menggunakan ini untuk mengakses objek, jadi ia boleh mendapatkan semula nilai objek atau menukar nilai objek. Mengikat ini pada objek berlaku pada masa panggilan.
2. corak seruan fungsi
Apabila fungsi bukan sifat objek, maka ia dipanggil sebagai fungsi. Apabila fungsi dipanggil sebagai mod panggilan fungsi, ini terikat pada objek global. Ini adalah kesilapan reka bentuk dalam JavaScript yang berterusan.
3. corak seruan pembina
JavaScript ialah bahasa berdasarkan warisan prototaip, yang bermaksud objek boleh mewarisi sifat secara langsung daripada objek lain dan bahasa itu tanpa kelas.
Jika anda memanggil fungsi dengan baharu di hadapannya, anda akan mendapat objek baharu yang menyembunyikan ahli prototaip yang disambungkan ke fungsi tersebut, dan ini juga akan terikat pada objek baharu.
Awalan baharu juga mengubah gelagat pernyataan pulangan. Ini juga bukan cara pengaturcaraan yang disyorkan.
4. Gunakan corak permohonan
Oleh kerana JavaScript ialah bahasa berorientasikan objek berfungsi, fungsi boleh mempunyai kaedah.
Kaedah Apply mempunyai dua parameter, yang pertama ialah nilai yang akan terikat pada ini, dan yang kedua ialah tatasusunan parameter Dalam erti kata lain, kaedah Apply membolehkan kita membina tatasusunan dan menggunakannya untuk memanggil fungsi , yang membolehkan kami memilih ini Nilai juga membolehkan kami memilih nilai tatasusunan.
Biasanya, penerima fungsi atau kaedah (nilai yang terikat pada kata kunci khas ini) ditentukan oleh sintaks pemanggil. Khususnya, sintaks panggilan kaedah mengikat objek kaedah kepada pembolehubah ini. Walau bagaimanapun, kadangkala perlu menggunakan penerima tersuai untuk memanggil fungsi. Pada masa ini, anda perlu menggunakan kaedah panggilan atau kaedah bind untuk menyesuaikan penerima untuk memanggil kaedah
2.4 Gunakan kaedah bind untuk mengekstrak kaedah dengan penerima yang ditentukan
Memandangkan tiada perbezaan antara kaedah dan sifat yang nilainya adalah fungsi, kaedah objek juga mudah diekstrak dan mengekstrak fungsi sebagai fungsi panggil balik dan menghantarnya terus ke fungsi tertib lebih tinggi.
Tetapi ia juga mudah lupa untuk mengikat penerima fungsi yang diekstrak pada objek dari mana fungsi itu diekstrak.
Pada masa ini, penerima butter.add bukanlah objek mentega. Penerima fungsi bergantung pada cara ia dipanggil Kaedah forEach dipanggil dalam skop global, jadi pelaksanaan kaedah forEach menggunakan objek global sebagai penerima lalai Oleh kerana tiada atribut entri dalam objek global, ini lontaran kod Ralat telah berlaku.
Kaedah forEach membolehkan pemanggil menyediakan parameter pilihan sebagai penerima fungsi panggil balik.
Tetapi tidak semua fungsi tertib tinggi cukup bertimbang rasa untuk menyediakan pengguna dengan penerima fungsi panggil balik.
Terdapat dua penyelesaian:
1) Buat fungsi pembungkus yang secara eksplisit memanggil tambah melalui kaedah objek penimbal. Tidak kira bagaimana fungsi yang dibalut dipanggil, ia sentiasa dijamin untuk menolak parameternya ke dalam tatasusunan sasaran.
2) Kaedah ikatan objek fungsi memerlukan objek penerima dan menjana fungsi pembalut yang memanggil fungsi asal menggunakan panggilan kaedah objek penerima.
Catatan
buffer.add.bind(buffer) mencipta fungsi baharu dan bukannya mengubah suai fungsi buffer.add:
buffer.add === buffer.add.bind(buffer); //false
Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.