-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path9-closure.js
executable file
·49 lines (47 loc) · 1.4 KB
/
9-closure.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//---closure---
//suatu fungsi yg dapat mengakses variabel didalam fungsi yg bersarang
// -disebut closure
//contoh:
function init (){
var name="obi wan" //local dlm scope fungsi
function greet(){ //fungsi dlm fungsi (closure)
console.log(`halo si ${name}`); //dpt panggil variabel diatasny
}
greet();
}
init(); //fungsi diatas dsebut memilik lexical scope
//contoh ke-2
function init2(){
var name2="obi wan wan"; //var name2 bersifat closure
function greet2(){
console.log(`halo ${name2}`);
}
return greet2;
}
let myFunct = init2();
myFunct();
//berbeda halnya dg java, JS tdk memiliki cara utk deklar variabel mnjd private.
//shg var atau fungsi bs diakses dr mana saja
//private metod ini penting agar kita dpt membatasi akses dari luar ke var atau fungsi itu sendiri
//contoh lain:
let counter=0;
let add= ()=>{
return ++counter;
}
console.log(add()); //hasil 1
console.log(add()); //hasil 2 ? wkwk
counter=23;
console.log(add());
// berikut contoh perbaikan fungsi diatas menggunakan closure agar private
let add2=()=>{
let counter2=0; //counter2 jgn dibiarkan di luar. masukkan ke dalam agar aman dr akses dr luar
return ()=> {
return ++counter2;
};
}
let addcounter2=add2();
console.log(addcounter2());
counter2=100; // counter2 tidak mempengaruhi fungsi add2 wkwk ajaib
console.log(addcounter2());
console.log(addcounter2());
console.log(addcounter2());