≡ Menu

JavaScript: Function Statement vs Function Expression

JavaScript © lookata/fotolia.com

Function atau dalam bahasa Indonesia dieja sebagai fungsi adalah sebuah konsep menyatukan beberapa kode ke dalam satu “bungkus” yang nantinya bisa dipanggil dengan nama “bungkus” itu. Dalam JavaScript, fungsi termasuk tipe data Object.

JavaScript memiliki dua cara dalam membentuk fungsi, function statement dan function expression. Banyak yang tidak dapat membedakan dua jenis fungsi ini, padahal sangat simpel. Perbedaannya hanya ada pada cara JavaScript menyimpan fungsi pada memori.

Function Statement

Deklarasi paling sering saya lihat adalah cara function statement. Function statement tidak mempedulikan posisi dimana fungsi itu dideklarasikan. Kita bisa menulis dimana saja saat membuat fungsi, karena tidak akan memengaruhi saat melakukan invoking.

hallo("JavaScript");
 
function hallo(name) {
  console.log("Hello " + name);
}
 
// Hallo JavaScript

Function Expression

Yang kedua adalah function expression, function expression harus dideklarasikan sebelum fungsi dipanggil. Jika tidak, fungsi tidak akan berjalan.

console.log(hallo);
 
var hallo = function (name) {
  console.log("Hello " + name);
}
 
// undefined

Cara JavaScript membaca kode memeng tidak langsung mengeksekusi kode tersebut, tetapi JavaScript memesan terlebih dahulu alamat memori untuk variabel (undefined value, tanpa pointing ke decelerated value), yang disebut dengan hoisting. Selanjutnya baru JavaScript mengeksekusi baris demi baris.

Itu alasan kenapa function statement bisa langsung di-invoking sedangkan function expression tidak.

var hallo = function (name) {
  console.log("Hello " + name);
}
 
console.log(hallo);
 
// function (name) {
//    console.log("Hello " + name);
// }

Function Arguments

Nah, parameter yang dimasukan ke dalam fungsi disebut dengan argumen. Pada JavaScript kita bisa melakukan printing argumen dengan cara melakukan log terhadap variabel arguments.

(function x(a, b, c) { return arguments; }(1, 2, 3));
 
// [1, 2, 3]

Cara di atas adalah cara invoking function on the fly (Fungsi dibuat dan dipanggil saat itu juga). Jelas bahwa JavaScript menyimpan parameter ke dalam bentuk array. Sehingga, dengan fungsi yang sama, fungsi hallo di atas bisa kita panggil dengan cara:

(function (name) {
  console.log("Hello " + arguments[0]);
}("JavaScript"));
 
// Hallo JavaScript

Anyway, untuk penamaan fungsi saat invoking function on the fly itu bersifat opsional.

Mana yang lebih baik? function statement atau function expression?

Saya pribadi lebih suka dengan function expression, karena dalam JavaScript, fungsi bersifat firstclass (bisa dimasukan ke dalam parameter) dan high-order (fungsi mereturn-kan fungsi). Dengan function expression, mau tidak mau kode yang kita tulis harus rapi. Dan memang, banyak pattern JavaScript yang saya baca memakai function expression dalam hal ini.

Bagaimana keren bukan?! bagian selanjutnya saya akan membahas tentang apa itu parameter by value vs parameter by reference.

{ 0 comments… add one }

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.