Ekspresi Fungsi Bernama dalam JavaScript
Misalkan kita memiliki ekspresi fungsi seperti ini:
let test = function() {
console.log('!');
};
test(); // akan menampilkan '!'
Mari kita beri nama func untuk fungsi kita:
let test = function func() {
console.log('!');
};
test();
Seperti yang sudah Anda ketahui, tidak dapat mengakses fungsi dengan nama ini:
let test = function func() {
console.log('!');
};
test(); // akan menampilkan '!'
func(); // akan menghasilkan error
Lalu untuk apa memberi nama fungsi jika tidak akan dapat diakses? Masalahnya adalah, nama ini tidak akan dapat diakses dari luar fungsi, tetapi dapat diakses di dalam fungsi itu sendiri.
Mari kita buktikan:
let test = function func() {
console.log(func); // fungsi akan menampilkan kode sumbernya sendiri
};
test(); // memanggil fungsi
Mari kita panggil fungsi kita di dalam dirinya sendiri:
let test = function func() {
console.log('!'); // menampilkan '!'
func(); // memanggil diri sendiri
};
test();
Jika kode ini dijalankan, maka akan menampilkan output ke konsol dalam jumlah tak terbatas.
Sebenarnya, fungsi kita dapat dipanggil
di dalam dirinya sendiri tidak hanya sebagai func, tetapi
juga sebagai test:
let test = function func() {
console.log('!');
test(); // memanggil diri sendiri
};
test();
Lalu apa perbedaannya? Perbedaannya adalah nama
test hanyalah sebuah variabel. Dalam proses
kerja skrip, fungsi kita mungkin ditulis
ke variabel lain atau diteruskan sebagai parameter
- dalam hal ini, hubungan antara variabel test
dan fungsi bisa terputus.
Nama func secara kaku terikat ke fungsi
khusus untuk memungkinkan akses
ke fungsi kita di dalam dirinya sendiri.
Function Expression dengan nama fungsi seperti ini disebut ekspresi fungsi bernama.