Behaviour JavaScript Global Variable

Lesson behaviour JavaScript pada Global Variable ini akan membahas behaviour dari JavaScript. Behaviour dari JavaScript bertujuan mempermudah programmer, namun dalam prakteknya bisa menimbulkan logic error dan bisa menimbulkan kebingungan.

Berikut contoh program sederhana untuk menjelaskan behaviour apa yang mungkin terjadi.

//code-01
var str1 = "print global";

function print(out){
  var str2 = out;
  console.log(str2);
}

print('hello');
console.log(str2);

//code-02
var str1 = "print global";

function print(out){
  str2 = out;
  console.log(str2);
}

print('hello');
console.log(str2);

Jika code-01 dijalankan, maka akan terjadi error, karena str2 undefined. str2 ada di function scope. Namun apa yang terjadi jika code-02 dijalankan, pada code-02 kita sengaja hilangkan keyword var pada variable deklarasi.

Program dari code-02 akan menampilkan ‘hello’ sebanyak dua kali. Tentu kejadian ini tidak sesuai ekspetasi. Berikut yang terjadi saat compiler masuk ke function print(out):

  • Compiler melihat str2 = out, compiler akan memeriksa function scope, apakah ada deklarasi variable?
  • Compiler tidak melihat ada deklarasi yang dimaksud, lalu akan mencari ke global scope.
  • Pada global scope juga tidak ada, dan JavaScript akan otomatis membuatkan deklarasi var str2.

Kejadian diatas memang disengaja untuk menunjukan behaviour JavaScript. Namun hal ini bisa terjadi dan cukup sering terjadi, karena JavaScript memperbolehkan kita membuat var tanpa melakukan deklarasi, hingga bisa terjadi ditengah baris code kita langsung membuat variable assignment.

Jika tidak ada keyword var pada deklarasi variable, maka variable tersebut akan ‘bocor’ ke global scope, dan kemungkinan besar, itu bukan tujuan yang dimaksud oleh programmer.

Untuk mencegah hal ini terjadi, dapat digunakan strict mode. Strict mode akan meminta JavaScript untuk tidak melakukan tindakan dibelakang layar seperti diatas. Pengunaan Strict mode akan dibahas pada lesson selanjutnya dengan beberapa contoh dimana strict mode akan mencegah JavaScript melakukan silent action diatas.

Sharing is caring: