-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy path09_hoisted_variable.js
63 lines (51 loc) · 1.51 KB
/
09_hoisted_variable.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
/**
* Selain function hoisting, ada Juga variable hoisting
*/
// ketika membuat variable dengan var , maka javascript engine
// akan "menganggap" variable itu sudah dideklarasikan di bagian paling atas
// suatu function
function test() {
if (true) {
var nilai = "10";
console.log(nilai);
} else {
console.log("0");
}
}
// lihat kita coba buat variable var nilai = "10" di bawah, tepatnya didalam block if { }
// javascript engine dibelakang, secara otomatis "menaikan" deklrasi variable itu di bagian paling atas
// function test()
// jadi kode diatas itu, oleh javascript engine dibelakang dibuat sama dengan berikut
function test() {
var nilai;
if (true) {
nilai = "10";
console.log(nilai);
} else {
console.log("0");
}
}
// perhatikan lagi
function test() {
if (false) {
var nilai = "10";
console.log(nilai);
} else {
console.log(nilai);
}
console.log(nilai);
}
test(); // outout: undefined...ini adalah kondisi valid dan tidak error
// fungsi diatas akan error jika kita pakai let atau const, bukan var
function test() {
if (false) {
let nilai = "10"; // const nilai = "10"
console.log(nilai);
} else {
console.log(nilai);
}
console.log(nilai);
}
test(); // Error: nilai is not defined
// kenapa kalao pake let dan const error? meskipun sebenarnya let dan const sama-sama di Hoisted, tapi let dan const tidak
// dapat di akses jika belum di deklarasi