Fungsi adalah salah satu elemen dasar dalam JavaScript. Fungsi adalah prosedur JavaScript — sekumpulan pernyataan yang melakukan tugas atau menghitung nilai. Untuk menggunakan suatu fungsi, Anda harus mendefinisikannya di suatu tempat dalam lingkup yang ingin Anda panggil. (“pengembang.mozilla.org”)

Artikel ini membahas berbagai fitur dan aturan fungsi dalam JavaScript seperti deklarasi dan pemanfaatan fungsi, argumen, parameter, dan cakupan.

Pelingkupan Fungsi

Saat kita mendefinisikan suatu fungsi, ruang lingkup dibuat oleh fungsi. Apa pun yang didefinisikan di dalam fungsi tidak dapat diakses di luar fungsi. Misalnya, variabel yang didefinisikan di dalam suatu fungsi menjadi LOCAL bagi fungsi tersebut dan hanya dapat diakses dari dalam fungsi tersebut.

Di bawah ini adalah contoh dasar pelingkupan fungsi.

Untuk Fungsi Bersarang juga aturan yang sama diterapkan.

Kari

Currying adalah alat dasar yang digunakan dalam Pemrograman Fungsional. Ini adalah teknik untuk mengubah pemanggilan fungsi dengan banyak argumen menjadi rangkaian pemanggilan fungsi dengan satu argumen untuk setiap panggilan.

Anda mungkin bertanya mengapa menggunakan kari. Berikut adalah contoh praktis penggunaan kari.

Misalnya kita memiliki fungsi bernama `add` yang mengambil dua argumen dan mengembalikan jumlah total argumen tersebut.

Sekarang buatlah sedikit lebih rumit dengan membuat argumen pertama tetap yaitu `a` yang harus selalu 4 tetapi ada kemungkinan angka lain terulang secara tidak sengaja. Untuk mengatasi masalah ini, kita dapat menggunakan fungsi kari.

Ekspresi Fungsi yang Segera Dipanggil (IIFE)

Ekspresi Fungsi yang Segera Dipanggil adalah fungsi anonim yang dapat dijalankan sendiri yang langsung menjalankan fungsi, segera setelah dibuat.

IIFE sangat berguna karena tidak mencemari objek global, dan merupakan cara sederhana untuk mengisolasi deklarasi variabel. IIFE memiliki akses ke cakupan sekitarnya, namun fungsi itu sendiri dan variabel internal apa pun tidak akan dapat diakses dari luar.

Fungsi Bernama/Tanpa Nama

Fungsi dapat diberi nama atau tidak diberi nama (fungsi anonim).

Beberapa perbedaan utama antara Fungsi Bernama & Tanpa Nama:

  • Fungsi yang diberi nama akan "diangkat" sedangkan fungsi yang tidak diberi nama tidak. Named hanya bisa dipanggil setelah baris deklarasi sedangkan unnamed bisa dipanggil sebelum deklarasi.
  • Fungsi yang diberi nama berguna untuk pengalaman debugging yang baik karena nama fungsi akan muncul di jejak kesalahan/tumpukan.

Mengikat `ini` dan argumen

Saat kita mengambil referensi ke suatu metode (properti yang merupakan fungsi) di JavaScript, biasanya metode tersebut tidak mengingat objek awalnya dilampirkan. Jika metode perlu merujuk ke objek tersebut karena metode ini tidak akan bisa, dan memanggilnya mungkin akan menyebabkan kerusakan.

Anda dapat menggunakan metode .bind() pada suatu fungsi untuk membuat wrapper yang menyertakan nilai this dan sejumlah argumen utama.

Contoh di bawah ini akan membuat Anda lebih jelas tentang hal ini.

Catatan: Jika tidak dalam mode ketat, `ini` secara default adalah objek jendela dan dalam mode ketat `ini` tidak ditentukan secara default.

Fungsi variadik

Fungsi yang jumlah argumennya tidak diketahui disebut fungsi variadik.

Ada dua metode untuk membuat fungsi yang menerima sejumlah argumen.

  • Metode 1 (ES5):Secara default suatu fungsi memiliki objek argumen seperti Array dalam cakupannya, yang berisi semua argumen yang diteruskan ke fungsi tersebut. Dengan menggunakan indeks kita dapat mengakses argumen.
  • Metode 2(ES6):Fungsi dapat dideklarasikan dengan parameter terakhirnya menggunakan operator sisanya ( … ). Ini menciptakan Array yang menyimpan argumen sejak saat itu dan seterusnya.

Parameter Bawaan

Ada 2 metode untuk mendeklarasikan parameter default di JavaScript.

  • Metode 1 (ES5) :
  • Metode 2(ES6) :

Panggil, terapkan & ikat

Ini adalah fungsi bawaan Javascript yang membantu memberikan argumen dan `ini` secara berbeda.

Daripada menjelaskan, contoh bisa lebih membantu untuk memahami fungsi panggilan dan penerapan.

Bind mirip dengan call & apply yang digunakan untuk secara eksplisit menyetel nilai fungsi `ini` ke objek tertentu. Namun perilakunya sangat berbeda; Argumen pertama untuk bind() adalah nilai `ini` untuk fungsi baru dan argumen lainnya mewakili parameter bernama.

Penerapan Parsial

Ini sangat mirip dengan metode Currying hanya saja hanya membutuhkan satu argumen.

Seringkali, kari digunakan sebagai pengganti sebagian karena sifatnya yang tidak dapat diprediksi.