Nuansa Ekspresi Fungsi dalam JavaScript
Nama Function Expression diberikan bukan tanpa alasan. Itu benar-benar berarti itu - bahwa fungsi semacam ini merupakan bagian dari suatu ekspresi.
Misalnya, kita dapat menambahkan string tertentu dan fungsi tanpa nama:
let str = 'str' + function() {return 3;};
console.log(str); // akan menampilkan 'strfunction() {return 3;}'
Mengapa kita melihat hasil yang aneh seperti itu,
bukan angka 3? Karena suku kedua
- ini bukan hasil kerja fungsi, melainkan kode sumbernya
(lagipula kita tidak memanggil fungsi ini, hanya
menuliskannya).
Artinya nama ekspresi fungsi menunjukkan bahwa fungsi seperti itu mengambil bagian dalam suatu ekspresi.
Penugasan ke variabel juga merupakan ekspresi:
let func = function() {
console.log('!');
};
Kita juga bisa, misalnya, meneruskan fungsi
sebagai parameter ke console.log dan itu akan menampilkan
kode sumbernya ke konsol - ini juga akan
dianggap sebagai ekspresi:
console.log(function() {return 3;});
Mengapa ini penting: karena perbedaan Function Declaration dan Function Expression sama sekali bukan terletak pada fungsi pertama dibuat dengan nama, sedangkan fungsi kedua awalnya tidak memiliki nama. Itu tidak benar.
Contoh. Ini adalah fungsi tanpa nama, tetapi tidak berpartisipasi dalam ekspresi apa pun (artinya tidak ada tindakan yang dilakukan padanya, secara sederhana):
/*
Fungsi ini akan menjadi Function Declaration,
tetapi dengan kesalahan sintaks:
*/
function() {
console.log('!');
}
Kode seperti itu akan menghasilkan error! Mengapa: karena fungsi tidak berpartisipasi dalam ekspresi apa pun, maka browser menganggapnya sebagai Function Declaration, tetapi tidak menemukan namanya dan menghasilkan error.
Agar error hilang, kita perlu membuat fungsi
menjadi bagian dari suatu ekspresi. Misalnya,
tuliskan operasi + di depannya:
+function() { // kode seperti ini benar
console.log('!');
};
Bagaimana cara kerjanya: operasi + itu sendiri
tidak melakukan apa-apa, ini sama seperti menulis
angka +3 sebagai ganti angka 3 - diperbolehkan,
tetapi tidak mengubah apa pun.
Tetapi dalam kasus fungsi - ini mengubah. Sekarang fungsi kita tidak hanya ditulis, tetapi berpartisipasi dalam ekspresi. Itulah sebabnya sekarang tidak akan ada error. Hasil eksekusi fungsi juga tidak akan ada, karena kita hanya menuliskannya, tetapi tidak memanggilnya.
Sebagai ganti + kita bisa menulis apa saja.
Misalnya:
-function() { // kode seperti ini benar
console.log('!');
};
!function() { // kode seperti ini benar
console.log('!');
};
Kita juga bisa menempatkan fungsi kita dalam tanda kurung, dalam hal ini juga akan menjadi ekspresi fungsi:
(function() { // kode seperti ini benar
console.log('!');
});
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
function func() {
console.log('!');
}
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
let func = function() {
console.log('!');
}
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
+function() {
console.log('!');
}
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
!function func() {
console.log('!');
}
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
-function func() {
console.log('!');
}
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
1 + function func() {
console.log('!');
}
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
(function func() {
console.log('!');
})
Tentukan apakah fungsi yang ditampilkan adalah Function Declaration atau Function Expression:
console.log(
function() {
console.log('!');
}
);