Fungsi adalah blok pernyataan modular yang dapat digunakan kembali yang digunakan untuk melakukan tugas terkait, seperti menghitung dan menampilkan nilai berdasarkan argumen yang disediakan untuk fungsi. Seperti halnya semua nilai non-primitif, fungsi adalah objek. Keduanya adalah objek unik karena dapat dipanggil menjalankan kode, meneruskan data dalam bentuk argumen, dan menampilkan nilai.
Fungsi dianggap sebagai "first class" yang berarti meskipun perilakunya unik, objek tersebut dapat digunakan di semua konteks yang sama seperti objek JavaScript lainnya. Misalnya, suatu fungsi dapat ditetapkan ke variabel, diteruskan sebagai argumen ke fungsi lain, dan dikembalikan oleh fungsi-fungsi lain.
function myFunction() {
console.log( "This is my function." );
};
Fungsi yang ditentukan sebagai properti objek
biasanya disebut
"metode". Seperti halnya variabel yang dideklarasikan menggunakan var
`,
deklarasi fungsi yang dibuat di luar fungsi yang mencakup ditambahkan ke
objek global sebagai metode.
Deklarasi fungsi
Deklarasi fungsi (juga disebut "pernyataan fungsi" atau "definisi fungsi")
membuat fungsi bernama yang dapat dipanggil di tempat lain dalam cakupan yang menampungnya.
Deklarasi fungsi terdiri dari kata kunci function
diikuti dengan
yaitu daftar parameter yang dipisahkan koma yang diapit oleh tanda kurung, dan
pernyataan blokir yang disebut
"isi fungsi". Anda akan sering menemukan deklarasi fungsi yang tidak
diakhiri dengan titik koma; karena deklarasi fungsi adalah pernyataan, di akhir
titik koma dapat disimpulkan oleh ASI.
function myFunction() {
console.log( "This is my function." );
};
myFunction();
> "This is my function."
Sebagai cadangan dari keputusan desain awal JavaScript, deklarasi fungsi
mengalami pengangkatan lama yang sama
perilaku sebagai variabel yang dideklarasikan dengan var
, yang berarti bahwa deklarasi fungsi
diangkat ke bagian atas cakupannya, dan dapat dipanggil sebelum dinyatakan sebagai
hasil, apakah cakupan tersebut diatur oleh mode ketat atau tidak:
"use strict";
{
myFunction();
function myFunction() {
console.log( "This is my function." );
};
}
> "This is my function."
Di luar mode ketat, fungsi deklarasi menggunakan cakupan lama JavaScript perilakunya, yang berarti deklarasi fungsi tercakup ke cakupan terdekatnya {i>function<i}:
function myFunction() {
function myNestedFunction() {
console.log( "This is my nested function." );
}
myNestedFunction();
};
myFunction();
> "This is my nested function."
myNestedFunction();
>Uncaught ReferenceError: myNestedFunction is not defined
Dalam mode ketat, deklarasi fungsi
dilingkupi ke blok pelampiran terdekat, seperti pada variabel yang dideklarasikan menggunakan
let
atau const
:
"use strict";
{
function myFunction() {
console.log( "This is my function." );
};
}
myFunction();
> Uncaught ReferenceError: myFunction is not defined
Panggilan fungsi
Seperti variabel, pengidentifikasi yang digunakan saat mendeklarasikan fungsi akan bertindak sebagai nama simbolis untuk nilai. Mereferensikan suatu fungsi hanya dengan ID akan menampilkan objek fungsi saja, dan tidak mengeksekusi fungsi yang ada di dalamnya:
function myFunction() {
console.log( "This is my function." );
};
myFunction;
> myFunction() {
console.log( "This is my function." );
}
Untuk mengeksekusi kode di dalam isi fungsi, panggil (atau panggil) fungsi dengan mengikuti nama fungsi menggunakan pasangan tanda kurung yang cocok:
function myFunction() {
console.log( "My function has been executed." );
}
myFunction();
> "My function has been executed."
Parameter dalam definisi fungsi bertindak sebagai variabel placeholder untuk nilai yang dapat diteruskan ke isi fungsi saat fungsi dipanggil. Nilai dalam tanda kurung saat fungsi dipanggil adalah "arguments" (meskipun Anda mungkin melihat "argumen" digunakan untuk menggambarkan argumen dan parameter dalam beberapa ):
function myFunction( myParameter ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction( "this string" );
> "The value is: this string."
Jika argumen yang diharapkan dihilangkan, parameter yang dihasilkan akan berisi sebuah
undefined
, karena parameter dideklarasikan ke isi fungsi, tetapi
tidak diinisialisasi dengan nilai:
function myFunction( myParameter ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction();
> "The value is: undefined."
Anda dapat menetapkan parameter value default dengan melakukan inisialisasi seperti
lakukan inisialisasi variabel: operator penugasan (=
) diikuti dengan nilai. Jika Anda
menentukan argumen untuk fungsi tersebut, nilai baru itu akan menggantikan
nilai default:
function myFunction( myParameter = "omitted" ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction( "this string" );
> "The value is: this string."
myFunction();
> "The value is: omitted."
Isi non-panah
juga memiliki akses ke skrip
objek arguments
seperti array
berisi nilai apa pun yang diteruskan sebagai argumen, baik fungsi tersebut maupun tidak
menentukan parameter:
function myFunction() {
console.log( arguments );
};
myFunction( 3, true, "My string" );
> Arguments { 0: 3, 1: true, 2: "My string", … }
Fungsi variadik
Objek arguments
memungkinkan Anda membuat fungsi variadic dasar, yang dapat
menerima argumen dengan jumlah variabel:
function myFunction() {
let result = "";
for (let i = 0; i < arguments.length; i++) {
result += arguments[i] + " - ";
}
console.log( result );
};
myFunction( "My first string", "My second string", "my third string" );\
> "My first string - My second string - my third string - "
Namun, pendekatan untuk fungsi variadic ini jarang digunakan di JavaScript modern pengembangan produk. Biasanya akan menggunakan cara yang lebih modern dan mudah dibaca sintaksis parameter REST, yang membuat parameter bernama yang diinisialisasi sebagai array yang berisi argumen di luar yang telah ditentukan secara eksplisit:
function myFunction( mySeparator, ...myStrings ) {
console.log( myStrings.join( mySeparator ) );
};
myFunction( " - ", "My first string", "My second string", "my third string" );
> "My first string - My second string - my third string"
Tidak seperti binding parameter
, sintaksis parameter sisa berfungsi seperti yang diharapkan dengan parameter fungsi panah:
function myOuterFunction() {
let myInnerArrowFunction = ( ...myParams ) => {
console.log( myParams[ 0 ] );
}
myInnerArrowFunction( true );
};
myOuterFunction( false );
> true
let myArrowFunction = ( ...myParams ) => {
console.log( myParams[ 0 ] );
};
myArrowFunction( true );
> true`
``