Ads: Singset Premium Jekyll Theme. A beautiful and modern theme for Jekyll blog. Use code 2tv6qos to get $18 off your purchase!
Javascript Hoisting
- Kategori:
- javascript
Function declaration dan variable declaration otomatis berpindah (“hoisted”) secara tak kasat mata ke posisi paling atas di dalam scope yang melakukan deklarasi oleh intepreter Javascript.
Variabel
Secara default jika variabel belum dideklarasikan, akan ada ReferenceError
.
function my_function() {
console.log(aloha); // => throws a ReferenceError
}
Saat variabel telah di-deklarasikan.
function my_function() {
console.log(aloha === undefined); // => true
var aloha = 1;
}
Kode diatas diintepretasikan oleh Javascript menjadi seperti dibawah ini.
function my_function() {
var aloha;
console.log(aloha === undefined); // => true
aloha = 1;
}
Berbeda dengan deklarasi variabel dengan var
, let
dan const
memiliki konsep Temporal Dead Zone (TDZ).
Dengan menggunakan let
, deklarasi ulang akan menyebabkan TypeError
.
if (aloha) {
let foo;
let foo; // TypeError thrown.
}
switch (aloha) {
case 0:
let foo;
break;
case 1:
let foo; // TypeError for redeclaration.
break;
}
Sedangkan melakukan referensi terhadap variabel didalam suatu blok sebelum variabel di-deklarasi akan menyebabkan ReferenceError
. Hal ini dikarenakan variabel berada dalam “temporal dead zone” hingga deklarasi variabel diproses.
// error
function my_function() {
console.log(foo); // ReferenceError
let foo = 2;
}
// error
function example() {
console.log(my_const); // => throws a ReferenceError
console.log(typeof my_const); // => throws a ReferenceError
const my_const = true;
}
Function
Perlu diketahui, Javascript ada istilah function expression dan function declaration.
var my_var = function() {/* do something */} // anonymous function expression
var example = function aloha() {/* do something */}; // named function expression
function example() {/* do something */} // function declaration
Anonymous function expression melakukan “hoist” terhadap nama variabel saja, tidak dengan isinya.
function my_function() {
console.log(my_anonymous); // => undefined
my_anonymous(); // => TypeError anonymous is not a function
var my_anonymous = function() {
console.log('anonymous function expression');
};
}
Named function expression melakukan “hoist” terhadap nama variabel saja, tidak dengan nama function ataupun body dari function.
function my_function() {
console.log(named); // => undefined
named(); // => TypeError named is not a function
example(); // => ReferenceError example is not defined
var named = function example() {
console.log('Aloha');
};
}
// ketika nama variable sama dengan nama function
// hasilnya sama
function my_function() {
console.log(named); // => undefined
named(); // => TypeError named is not a function
var named = function named() {
console.log('named');
}
}
Function declaration melakukan “hoist” baik nama ataupun body dari function.
function my_function() {
example(); // => Flying
function example() {
console.log('Aloha');
}
}
Lebih lanjut mengenai hosting dapat dilihat tulisan Javascript Scoping & Hoisting.
Referensi
- Tag:
- #javascript
Rekomendasi Services
Service-service dibawah ini pernah dan sedang oleh KAK Labs saat mengembangkan project dan sangat direkomendasikan.
- Digital Ocean - Daftar server cloud di Digital Ocean melalui link ini akan mendapatkan kredit $200
- Bunny CDN - CDN favorit, yang KAK Labs gunakan disemua project
- Namecheap - Tempat beli domain .id terfavorit.
- Backblaze - Online Backup agar laptop jika terkena ransomware tetap tenang
- Dediserve - Cloud server ini memiliki Datacenter di Jakarta, digunakan oleh project KAK Tools
Tulisan Terbaru
HTML Boilerplate
HTML Boilerplate versi KAK Labs
No-Class / Classless CSS Frameworks
Daftar CSS frameworks tanpa class versi KAK Labs
Microsoft C#
Review, rekomendasi link belajar dan rekomendasi extensions Visual Studio Code untuk C#
Typography
Typography, 50 Bytes CSS, dan 100 Bytes CSS
Membangun Penyimpanan RAID 5 - Bagian 2 (Tamat)
Bagian kedua membangun penyimpanan RAID, tulisan kali fokus bagaimana setup HDD Enclosure untuk mode RAID