-
Notifications
You must be signed in to change notification settings - Fork 0
/
Example-Closure-1.js
141 lines (106 loc) · 2.07 KB
/
Example-Closure-1.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Example Closure
function init1() {
let nama = 'Godam'; //local variable
function tampilNama(){ //inner function (closure)
console.log(nama); //akses ke parent variable
}
tampilNama();
}
init1();
// inner function yang membutuhkan variable di parent scope-nya (lexical scope) disebut closure
// buka console
// outputnya:
// Godam
function init2() {
let nama = 'Godam';
function tampilNama(){
console.log(nama);
}
console.log(tampilNama());
}
init2();
// buka console
// outputnya:
// Godam
// undefined
function init3() {
let nama = 'Godam';
function tampilNama(){
console.log(nama);
}
console.dir(tampilNama);
}
init3();
// buka console
// outputnya berupa Object:
// ƒ tampilNama()
// klik Scopes, akan tampil:
// [[Scopes]]: Scopes[2]
// 0: Closure (init) {nama: 'Godam'}
// 1: Global {window: Window, self: Window, document: document, name: '', location: Location, …}
function init4() {
let nama = 'Godam';
function tampilNama(){
console.log(nama);
}
return tampilNama;
}
init4();
// buka console
// output:
// Nothing
// ini karena dgn perintah return baru setengah program aja yg dijalankan
// agar dijalankan seluruhnya, maka baris terakhir ganti dgn kode berikut (buka kasus4):
// let panggilNama = init();
// panggilNama();
function init5() {
let nama = 'Godam';
function tampilNama(){
console.log(nama);
}
return tampilNama;
}
let panggilNama5 = init5();
panggilNama5();
// buka console
// output:
// Godam
function init6() {
let nama = 'Godam';
function tampilNama(tampil){
console.log(nama);
console.log(tampil)
}
return tampilNama;
}
let panggilNama6 = init6();
panggilNama6("Gada");
// buka console
// output:
// Godam
// Gada
function init7() {
//let nama = 'Godam';
function tampilNama(nama){
console.log(nama);
}
return tampilNama;
}
let panggilNama7 = init7();
panggilNama7('Godam');
// buka console
// output:
// Godam
function init8() {
//let nama = 'Godam';
return function(nama){
console.log(nama);
}
}
let panggilNama8 = init8();
panggilNama8('Palu');
panggilNama8('Godam');
// buka console
// output:
// Palu
// Godam