Ungkapan Fungsian Bernama dalam JavaScript
Katakan kita mempunyai ungkapan fungsian seperti berikut:
let test = function() {
console.log('!');
};
test(); // akan output '!'
Mari kita beri nama func
kepada fungsi kita:
let test = function func() {
console.log('!');
};
test();
Seperti yang anda sudah tahu, anda tidak boleh mengakses fungsi melalui nama ini:
let test = function func() {
console.log('!');
};
test(); // akan output '!'
func(); // akan ralat
Apakah gunanya memberi nama kepada fungsi jika ia tidak akan boleh diakses? Hakikatnya, nama ini tidak boleh diakses dari luar fungsi, tetapi boleh diakses di dalam fungsi itu sendiri.
Mari kita uji:
let test = function func() {
console.log(func); // fungsi akan output kod sumbernya sendiri
};
test(); // panggil fungsi
Mari kita panggil fungsi kita di dalamnya sendiri:
let test = function func() {
console.log('!'); // output '!'
func(); // panggil diri sendiri
};
test();
Jika kod ini dijalankan, output yang tidak terhingga akan dipaparkan ke konsol.
Sebenarnya, fungsi kita boleh dipanggil
di dalamnya sendiri bukan sahaja sebagai func, tetapi
juga sebagai test:
let test = function func() {
console.log('!');
test(); // panggil diri sendiri
};
test();
Apakah perbezaannya? Perbezaannya ialah nama
test hanyalah sebuah pembolehubah. Semasa
skrip berjalan, fungsi kita mungkin ditulis
kepada pembolehubah lain atau dihantar sebagai parameter
- dalam kes ini, sambungan antara pembolehubah test
dan fungsi mungkin terputus.
Namun, nama func diikat secara tegar kepada fungsi
khusus untuk membolehkan akses kepada
fungsi kita dari dalamnya sendiri.
Function Expression sedemikian dengan nama fungsi dipanggil ungkapan fungsian bernama.