Advance JavaScript 5 - closure

Advance JavaScript 5 - closure




Apa itu closure

Menurut mozila (mdn)
"Closure merupakan kombinasi antara function Dan lingkungan lexical (lexical scope) didalam function tersebut.

Menurut W3school
"Closure adalah sebuah function ketika memiliki akses ke parent scope nya ,meskipun parent scope nya sudah selesai dieksekusi"

Menurut code fellow
"Closure adalah sebuah function dikembalikan oleh function yang lain, yang memiliki akses ke lingkungan saat ia diciptakan"

Menurut techsith
"Closure adalah sebuah function yang sebelumnya sudah memiliki data hasil dari function yang lain"


Itu dia closure menurut beberapa sumber.sekarang Kita akan membahas apa itu lexical scope

Misal Kita punya code berikut

function init(){
let nama = "gimasn";
function tampilNama(){
console.log(nama);
}
tampilNama()
}
init()

Kita punya sebuah function yang diluar itu namanya function init yang didalam nya Ada sebuah variabel nama , Dan sebuah function lagi yang namanya tampilNama didalam tampilNama Ini menjalankan console.log nama lalu function tampilnama itu di panggil Dan diluar function init itu juga dipanggil

Disini Kita punya sebuah lokal variabel (variabel yang dibuat di dalam function init),didalam function init juga Kita punya sebuah function lagi yang Kita debit dengan inner function (*closure) inner function ini bisa memiliki akses ke parent variabel nya jadi ketika Kita panggil console.log nama ,kalau kalian ingat exsekusi context dia nyari dulu Ada ga variable nama di tampilNama , kalau ga Ada dia Cari ke atas ,ke function init ,jika tidak Ada juga dia akan terus ke atas sampai ketemu global object nya yaitu window ,nah ini yang disebut dengan lexical scope jadi function tampilNama punya akses ke variabel nama padahal Ada di luar function nya begitu kasus ini terjadi ,inner function membutuhkan variabel yang Ada di parent scope nya maka inner function ini disebut dengan closure.

Kenapa menggunakan closure

1.untuk membuat function factories

Contoh code:

function ucapamSalam(waktu){
return function nama(){
console.log(`hallo ${nama} selamat ${waktu}, semoga harimu menyenangkan`)
}
}

let selamatpagi = ucapanSalam('pagi');
let selamatsiang = ucapanSalam('siang');
let selamatmalam = ucapanSalam('malam')

console.dir(selamatmalam('gimasnur'));


2.untuk membuat sebuah private method


Contoh code:


membuat counter supaya hitungan nya tidak terganggu


let add = function () {

let counter = 0;

return function (){

return ++counter

}

}


let a = add()


console.log(a());

console.log(a());

console.log(a());




Komentar

Postingan populer dari blog ini

ethical hacking part 14 membuat malware Trojan

CSS layouting - box model: CSS reset

ethical hacking part 3 reconnaissance & information gethering