Skip to content

JavaScript’te Scope Kavramı ve Var, Let ve Const’un Kullanımı

Merhaba, bu yazımda JavaScript programlama dilinde önemini zamanla daha iyi anladığım Scope (Kapsam) kavramı ve değişken tanımlamada kullanılan anahtar kelimelerin kullanımından bahsedeceğim.

Scope (Kapsam) Nedir? Türleri Nelerdir ?

Scope, ilgili değişkenlere ulaşabildiğimiz alanı temsil eder. Global Scope ve Local Scope (Block Scope ve Function Scope) olmak üzere türleri vardır.

  • Global Scope: Fonksiyonların ya da for, if veya while gibi blokların dışında tanımlanan değişkenlerin sahip olduğu Scope türüdür. Bu değişkenlere her yerden ulaşılabilir.
  • Local Scope: Global Scope’da belirtilen yapıların içerisinde tanımlanmış ve sadece tanımlandığı alan içerisinden ulaşılabilen değişkenlerin sahip olduğu scope türüdür. ES6 ile gelen let ve const’un sahip olduğu Block Scope ve Function Scope kavramlarını örnekler üzerinden açıklayacağım.

Scope Örnekleri

1. Aşağıdaki örnekte sayiTanimla fonksiyonu içerisinde var ile tanımlanan sayi değişkeni Function Scope içerisinde yer almaktadır. Bu nedenle 5. Satırda olduğu gibi fonksiyon dışındaki bir alandan bu değişkene ulaşmak istediğimizde “ReferenceError: sayi is not defined” hatasını alırız.

2. Aşağıdaki örnekte Global Scope içerisinde yer alan ad değişkenine fonksiyon içerisinden ulaşılmış ve string birleştirme işlemi yapıldıktan sonra konsola yazdırılmıştır.

3. Aşağıdaki örnekte sayiTanimla fonksiyonu içerisindeki işlemler, 1. satırda tanımlanmış Global Scope içerisindeki 5 değerine sahip sayi değişkenini etkilememiş ve konsola 1-1 değerleri yerine 1-5 değerleri yazdırılmıştır.

4. Anahtar kelimeleri (var, let ve const) kullanmadan daha önce tanımlanmamış bir değişkene değer atamasını yapabiliriz. Bu işlemi gerçekleştirdiğimiz zaman ilgili değişken Global Scope içerisinde yer alır ve bu değişkene her yerden ulaşılır. Aşağıdaki örnekte daha önce tanımlanmamış sayi değişkenine fonksiyon içerisinde atama yapıldığı halde, Global Scope içerisinde yer alacağından bu değişkene dışarıdan ulaşılmaktadır.

Ek bilgi: Koda ekleyeceğimiz “use strict” ile değişkene anahtar kelimesiz ilk atamayı engelleyebiliriz. Bu işlem yapıldığında aynı 1. örnekte olduğu gibi referans hatasını alırız.

Var, Let ve Const Arasındaki Farklar

ES6 ile gelen let veya const ile tanımlanan değişkenler Function Scope yerine Block Scope içerisinde yer alır. Ayrıca değişkenin aynı isimle yeniden tanımlanmasında var değişkeni ile izin verilirken diğerlerinde buna izin verilmez. Const adından da anlaşılacağı üzere değiştirilmesi istenmeyen sabit değerlerin atanmasında kullanılan anahtar kelimedir. Aralarındaki farkların daha iyi anlaşılması için yaptığım örnekleri inceleyelim.

1. Aşağıdaki örnekte if bloğuna girilmesine rağmen konsolda 10 değeri yazdırılmıştır çünkü; if bloğu içerisindeki sayi değişkeni let ile tanımlanmış ve Block Scope içerisindedir. Konsola yazdırma işlemi Function Scope içerisinde olduğundan 10 değeri yazdırılır.

2. Aşağıdaki kodda ise her 2 tanımlamada da var anahtar kelimesi kullanıldığı için değişkenler Function Scope içerisinde yer almıştır. Bu nedenle konsola 5 değeri yazdırılır.

3. Sabit değere sahip değişkenleri const ile tanımlayıp, değişkenin kod içerisindeki başka yerlerde değiştirilmesini engelleriz. Aşağıdaki örnek kodda pi sayısının hem 3 hem de 3.14 olarak alınması const ile engellenmiştir.

4. Aynı Scope içerisinde bir değişkenin let ile birden fazla tanımlanmasına izin verilmezken var ile izin verilmektedir. Aşağıdaki örnekte aynı Scope içerisinde a değişkeni var ile 2 kere tanımlanabilirken, b değişkeni let ile 1 kere tanımlanabilmektedir. 4. veya 6. satırdaki yorum satırı kaldırıldığında a ya da b değişkeni konsola yazdırılmak istenirse daha önce ilgili değişkenin tanımlandığını bildiren Syntax hatasını alırız.

Burada yaptığım örnekler basit olsa da kod sayısının fazla olduğu projelerde Scope kavramını iyi bilmek ve anahtar kelimeleri doğru şekilde kullanmak belleğin verimli kullanılmasını, kodu okuyacak olan diğer kişilerin kodu daha iyi anlamasını ve yapılması muhtemel hataların önüne geçilmesini sağlamak için önemlidir. Sorularınız ya da geri dönüşleriniz için yasinatilgan60@gmail.com adresi üzerinden bana ulaşabilirsiniz. Bir sonraki yazımda görüşmek üzere…

Kaynaklar

https://www.w3schools.com/js/js_scope.asp

Published inJavaScript

Comments are closed.

Yasin Atılkan © 2025 Copyright | Author WordPress Theme by Compete Themes