JavaScript’te “Implied Globals” Kavramı
Bu yazımızda, JavaScript’in dinamik yapısından kaynaklanan ilginç konseptlerinden biri olan “implied globals” kavramını detaylıca inceleyeceğiz.
“Implied Globals” Nedir?
JavaScript’te “implied globals” kavramı, bir değişkenin doğrudan tanımlanmadığı halde bir fonksiyon içerisinde kullanılması durumunu ifade eder. “Automatically global” olarak da adlandırılan bu kavram Türkçede örtülü dönüşüm olarak adlandırılmaktadır.
Bu durum, bir değişkene değer atanırken var
, let
veya const
anahtar kelimelerinden herhangi biri olmadan değer ataması yapılması durumunda oluşur.
Yani JavaScript’te bir değişkene doğrudan değer atanabilir. Eğer bu değişken önceden var
, let
veya const
anahtar kelimeleriyle tanımlanmamışsa, JavaScript bu değişkeni otomatik olarak küresel değişken olarak kabul eder. Haliyle bu değişken fonksiyonun içinde veya dışında erişilebilir hale gelir. Örneğin:
1 2 3 4 5 6 7 8 |
function myFunction() { myVar = "Hello World"; // var, let veya const kullanılmadan değişken tanımlandı console.log(myVar); } myFunction(); // "Hello World" çıktısı alınır console.log(myVar); // "Hello World" çıktısı alınır |
Yukarıdaki örnekte, myFunction
fonksiyonunun içerisinde myVar
isimli bir değişken tanımlandı. Ancak bu değişken, var
, let
veya const
anahtar kelimeleri kullanılmadan doğrudan tanımlandığı için myVar
değişkeni otomatik olarak global kapsama alınmıştır. Yani myFunction
fonksiyonu çağrıldığında, myVar
değişkenine “Hello World” değeri atanır ve bu değer fonksiyon içinde ve dışında erişilebilir hale gelir.
Yukarıdaki örnekte, myVar
adlı değişkenimizi doğrudan değer atayarak tanımladık. Ancak bu tanımlama sırasında herhangi bir var
, let
ya da const
anahtar kelimesini kullanmadık. Bu durumda, JavaScript otomatik bir şekilde bu değişkeni global kapsamda tanımlar. Pratikte bu, en başında sanki “var myVar = undefined;
” şeklinde bir tanımlama yapılmışçasına bir davranışı tetikler.
Hele de “strict mode” kullanılıyorsa, böylesi bir kullanım hata verecektir. Bakınız:
1 2 3 4 5 6 7 8 |
"use strict"; function myFunction() { myVar = "Hello World"; // Hata! myVar önceden tanımlanmadı. console.log(myVar); } myFunction(); |
Bu kodda, “strict mode” aktif edildiğinde myVar
değişkeninin doğrudan tanımlanması hataya neden olacaktır. Çünkü “strict mode”, değişkenleri tanımlarken bir anahtar kelimenin (örn. var
, let
veya const
) kullanılmasını zorunlu kılar.
Bu yüzden, değişken tanımlarken “implied globals” oluşturacak durumlarından kaçınmalı ve mutlaka var – let – const anahtar kelimelerinden birisi kullanılmalıdır.