JavaScript — Değişkenler (var,let ve const) Scope Kavramları
Değişkenler en basit tabirle değerleri hafızada tutmak için kullanılan yapılardır. Bir tanımlayıcı ile tanımlanır. Tanımlayıcı öncesi var
, let
veya const
deklerasyonlarından biri kullanılarak deklare edilir. Değişken isimlendirmede dikkat etmemiz gerekenler şunlardır.
- Değişken isimleri harf,
_
veya$
işareti ile başlayabilir. Fakat ES5 (ECMAScript 5) ile birlikte gelen özellikle UNICODE kodları kullanılırken kaçış karakteri olarak kullanılan\
işareti ilk karakter olarak kullanılabilir.
- İlk harften sonra değişken isimlerinde rakamlar da kullanılabilir.
$
ve_
dışında başka noktalama işaretleri kullanılamaz
- Rezerve edilen kelimeler kullanılamaz (var, if, while, function..) Rezerve edilen kelimelerin listesini buradan inceleyebilirsiniz.
- JavaScript büyük-küçük harf duyarlıdır (case sensitive).
- Değişken ismindeki harfler arasında boşluk kullanılamaz.
✨ İsimlendirme kurallarının dışında, isimlendirme yazım çeşitleri hakkında bilgi almak için https://devopedia.org/naming-conventions adresini inceleyebilirsiniz.
Değişkene Değer Atama ve Veri Türleri
Değişkenlere değer atama =
operatoru ile yapılır.
şeklinde bir değişken tanımladığımızda okulNumarasi
değişkenine sayısal bir değer olan 12 değeri atanır.
Yukarıda kod parçasında görüldüğü gibi ilk olarak değişken tanımlaması yapılıp, değer ataması daha sonra yapılabilir. Değişkenler değer atanmadığı takdirde undefined
değerini alırlar.
Yukarıda ki kod parçasında olduğu gibi tek bir satırda, deklerasyonları aynı fakat farklı tanımlayıcılar ile tanımlamış değişkenler tek bir satırda tanımlanabilir ve değer atanabilir.
JavaScript loosely typed bir programlama dilidir. Yani bir değişkeni tanımlarken değişkenin türünü (sayısal, metinsel, boolean) belirtmemize gerek yoktur.
Bir değişkene aşağıda ki veri tiplerini atayabiliriz.
- Boolean = Mantıksal ifadedir.
true
veyafalse
degeri atanabilir.
- Number = Sayısal ifadedir. 2⁵³ -1 değerine kadar sayısal değerler atanabilir.
- BigInt = 2⁵³-1 değerinden büyük değerleri atayabilir.
- String = Metinsel ifadelerdir. Metinsel ifade tanımlanırken ifade
“ ”
veya‘ ’
işaretleri arasına yazılır.
- Null = Boş değerinin karşılığıdır.
- undefined = Tanımsız değerinin karşılığıdır.
- Symbol = ECMAScript 2015 ile kullanıma girmiştir.
Symbol()
fonksiyonu çağırılarak bir Symbol değeri tanımlanabilir.
- Object = Yukarıda ki 7 veri türü de primitive tiplidir . Objelerde ( nesne, dizi ) gibi referans tipler de değişkenlere atanabilir.
var
Global scope veya function scope ta deklerasyon sağlayamaya yarayan keyword dur. Scope özelliklerini daha sonra örneklerle açıklayacağız. var
ile tanımlanan değişkenlerin özellikleri şunlardır.
- Değişken değerleri değiştirilebilir.
- Aynı isimle tekrardan tanımlanabilirler.
var
ile tanımlanan değişkenler global scope veya function scope tur. Global scope da tanımlanan değişkenlere her yerden ulaşılabilir. Function içerisinde tanımlanan değişkenlere ise tanımlı olduğu fonksiyonda ulaşılabilir. Bu konuyu örneklerle açıklayalım.
Kod parçasında görüldüğü gibi globalde tanımladığımız degisken
isimli değişkene her yerden erişebiliriz.
Yukarıda ki kod parçasını incelediğimizde functionScopeDegisken
isimli değişken function scope da tanımlanmıştır. Function scope da ki değişkenlere tanımlı oldukları fonksiyonun blocklarından erişilebilir. Function scope da tanımlı değişkenlere fonksiyon dışında erişilmeye çalışıldığı zaman ReferenceError
hatasını verir. Bunun sebebi function scope da tanımlı olmasıdır.
blocktaTanimliDegisken
isimli değişken block içerisinde tanımla olsa bile, bulunduğu fonksiyonda tanımlı olduğu için tanımlı olduğu fonksiyonun her yerinden ulaşılabilir, fakat fonksiyon dışından erişilemez.
var
ile tanımlanan değişkenlerin block scope olmamasından dolayı karşımıza bazı sorunlar çıkabilir. Örneğin ;
weAre
değişkeninin if bloğunun içine girdikten sonra Just human
ile değişmesini ve blok içerisinde Just human
değeri ile işlem yapmak istiyoruz, fakat var ile tanımlanan değişkenin block scope olmamasından dolayı globalde tanımladığımız değişken değeri de değişiyor. Bu istenmeyen sonuçlar elde etmemize neden olabilir.
2015 yılında ES6 çıkmasıyla beraber değişken tanımlamak için let
ve const
keywordleri de kullanılmaya başlanmıştır.
let
Değişkenleri block scope ta tanımlayan deklerasyondur. let
ile tanımlanan değişkenlerin özellikleri şunlardır.
- Değişken değerleri değiştirilebilir.
- Aynı isimle tekrardan aynı blokta tanımlanamaz. Farklı blocklar da aynı isimle tanımlanabilir.
Yukarıda ki kod parçası aynı zamanda block scope kavramını açıklamamıza da yardımcı olur. let
ile deklare edilen her değişken bulunduğu blokta tanımlıdır. Başka bir örnek vermek gerekirse ;
Yukarıda ki kod parçasını incelediğimizde ilkDegisken
isimli değişkenimiz fonksiyon bloğumuzda tanımlıdır ve alt bloklardan da erişilebilir. ikinciDegisken
isimli değişkenimiz ise if bloğunun içindedir ve sadece orada tanımlıdır, başka yerlerden erişilemez. var
ile tanımladığımız değişkenler function scope oluyorlardı. İkisi arasında ki farkı scopelarını açıkladığımız örnekleri inceleyerek gözden geçirebilirsiniz.
const
Block scope da tanımlı, değeri sonradan değiştirilemez değişkenleri deklare etmek için kullanılan keyword dür.
Const
ile tanımlanan değişkenlerin değeri değiştirilemez.- Değer atamadan tanımlama yapıldıktan sonra değer ataması yapılamaz.
Const
ile tanımlanan objelerin özellikleri (properties) değiştirilebilir fakat objenin kendisi değiştirilemez. Diziler içinde aynısı geçerlidir. Dizi değerleri değiştirilebilir fakat dizinin kendisi değiştirilemez.
Kaynakça: MDN