Javascript’te Scope Nedir?

Merhabalar,

İlk yazımda, Javascript’te ve daha bir çok programlama dilinde de var olan Scope kavramından bahsetmek istedim. Özellikle yeni başlayan biri için kafa karıştırıcı olan bu kavramı klavyem döndüğünce size açıklamak istiyorum.

It matters where the variable is declared.

Yani diyor ki bir değişkeni nerede tanımladığınız önemlidir. Nerede sorusunun cevapları şu şekilde olabilir, bir fonksiyon içinde tanımlanmış bir değişkenin mi var ya da if bloğu içinde bir değişkenin mi var ya da bunların en dışında bir değişken mi tanımladın? Değişkeni nerede tanımladığına dikkat etmek kodunu izlemeni sağlayacaktır.

Eğer aşağıdaki koddaki gibi bir değişken tanımlanırsa, bu global scope’ta tanımlanmış bir global değişken olacaktır. Yani bu değişkene her yerden ulaşılabilir.

Diğer scope kavramı da local spoce’tur. If bloğu, for döngüsü ya da bir fonskiyon içinde değişken tanımladığımızda ise local spoce’ta yer alan bir local değişken tanımlamış oluruz. Bu local değişken ise sadece tanımladığımız yerde ulaşılabilen bir değişken olur. Aşağıdaki kodda, aynı değişken ismiyle tanımlanmış stringlerim mevcut. Bu değişkenler sadece tanımlandıkları yerde geçerli olacaklar.

Peki global spoce’ta tanımladığımız değişkene her yerden ulaşamıyor muyduk? Cevabı evet, ulaşabiliyoruz. Hatta o değişkene yeniden atama bile yapabiliyoruz. Sadece, local scope içinde o değişken adıyla bir tanımlama yaptığımızda artık local değişken olarak, o adla bir değişken tanımladığımızda ulaşamıyoruz.

Local bir değişkene ise local spoce harici bir yerde ulaşmak istersek hata ile karşılaşırız. Local değişken sadece orada tanımlandığı local spoce’ta ulaşılabilir durumdadır.

Örneklerimizi zenginleştirerek devam edelim.

Yukarıdaki kodda, ilk ulaştığım değişken if bloğu içindeki local değişkenim oluyor. İkinci olarak ulaştığım local değişken fonksiyonumun içinde geçerli çünkü yeni bir değişkeni aynı adla tanımladım. Son olarak global değişkenime ulaşıyorum. Peki, başka bir açıdan bakmak içinde aşağıdaki kodu inceleyim.

Burada ise if bloğu, fonksiyonumun içinde tanımlanmış olsa bile fonksiyonumun içinde o değişkene ulaşamıyorum. Local değişken kendi tanımlandığı local spoce’unda geçerliydi. Global değişkenime ise her yerden ulaşabilirim.

Bu kavramları pekiştirmek için biraz daha inceleme yapalım. Yukarıdaki kodda ise local değişkenlerime local spoce’ta ulaşabildiğimi ama global scope’ta ulaşamadığımı görüyorum.

Son olarak yukarıdaki kodu incelemeniz için buraya bırakıyorum ve let ve var keywordlerinin bu konuda kafa karıştıran sonuçlarına göz atalım istiyorum.

Öncelikle aşağıdaki kodda let ve var keywordlerinin nasıl çalıştıklarını inceleyelim. let, aynı adla tanımlanmış bir değişkeni aynı spoce’ta iken tekrar tanımlamamıza izin vermiyorken var, tekrar aynı adla aynı spoce içinde tanımlama yapmamıza izin veriyor ve o değişkene atama yapmışız gibi davranıyor. Javascript’in yeni standartlarını belirleyen ES6'nın gelmesiyle let ve const kavramları gibi yeni özellikler getirilmiştir. Yani ES6'dan önce sadece var vardı ve böyle davranması sonucundaki dezavantajları giderilmek için ES6 ile let ve const keywordleri getirilmiştir. ES6 ile var kullanılmaması önerilmektedir.

Aşağıdaki kodda, var keywordu global scope gibi davranarak çıktı verdiğini görüyoruz.

Javascript’te değişkenlerimizi güvene almak için, bu gibi karışıklıklar yaşamamak için const veya let kullanmalıyız. Scope verimli bir kod yazmamıza ve daha az hata ile karşılaşmamıza yardımcı oluyor.

KAYNAKLAR:

🙋🏻‍♀️