Yükleniyor...

Kapsam (scope)

Değişken bildirmeyi, fonksiyon yazmayı ve değer döndürmeyi biliyorsunuz. Bir kural daha var: bir adın erişilebilir olup olmadığını kapsam (scope) belirler. Soru şudur: «buradan hangi adları kullanabilirim?»

Kapsam ne demek

Kapsam, programda bir adın yaşadığı bölgedir. Dışında aynı yazım görünmez olabilir — veya başka bir bağlamaya işaret eder. Odalar gibi düşünün: mutfak duvarındaki etiket mutfakta nettir; sokakta kendiliğinden görünmez.

Üç günlük tür

📊 Global, fonksiyon ve blok kapsamı

Tür Ad nerede yaşar Tipik araçlar Nerede görünür?
global her fonksiyonun dışında üst düzey let / const / var tüm betikte (aynı sayfa)
fonksiyon (yerel) fonksiyon gövdesinde parametreler ve yereller yalnızca o fonksiyonda
blok if veya döngüdeki { } içinde let ve const yalnızca o blokta

Bu üçü çoğu başlangıç kodunu kapsar. Fonksiyon yerelleri özel kalır. let/const blok bağlamaları süslü parantez içinde kalır. Globaller paylaşılır — ortak sayaç için yararlı; her ad global olursa riskli.

Global bir ad

javascript
let city = "Tehran";
function showCity() {
console.log(city);
}
showCity();
console.log(city);

Global adlar fonksiyonların dışında durur

city üst düzeyde bildirilir; hem fonksiyon hem sonraki console.log okur. Dizgeyi bir kez değiştirin; her okuyucu yeni değeri görür. Gerçekten paylaşılan bir değer yoksa global kullanmayın.

Fonksiyon içinde yerel ad

javascript
function greet() {
let message = "Hello";
console.log(message);
}
greet();
// console.log(message); // Error: message is not defined

Yereller fonksiyonda kalır

message yalnızca greet çalışırken vardır. Dışında ad tanımlı değildir. Parametreler de öyle: onları listeleyen fonksiyona yerellerdir.

let ile blok kapsamı

javascript
if (true) {
let score = 10;
console.log(score);
}
// console.log(score); // Error: score is not defined

let ve const bloklara saygı duyar

{ } içinde let veya const bağlaması yalnızca o blokta görünür. Kapanıştan sonra score gider. Eski var fonksiyon kapsamlıdır ve bloktan «sızabilir». Blok kenarı göründüğü anlama gelsin diye let/const tercih edin.

İç içe kod dışa okur

javascript
let title = "Shop";
function show() {
let label = "open";
console.log(title + " is " + label);
}
show();

İç içe dışa bakar

show dış title ile kendi label’ını okur. Arama eşleşene kadar dışa yürür. İçe değil: dış kod yalnızca fonksiyon içinde doğmuş adı görmez.

İç ad dışın üstüne gölge düşürür

javascript
let status = "ok";
function check() {
let status = "busy";
console.log(status);
}
check();
console.log(status);

Gölgeleme: içeride iç olan kazanır

check içinde yerel status dışını gizler. Çağrı busy yazar. Fonksiyon bitince dış hâlâ ok’tur. Aynı yazım, iki bağlama — hangisine dokunacağınızı kapsam karar verir.

Kapsamlı değeri sayfada gösterin

Global bir etiket tutun, fonksiyon içinde hâlâ okuyabilen bir satır kurun ve sonucu paragrafa yazın.

Kapsamlı sayfa demosu

html
<!DOCTYPE html>
<html>
<head>
<title>scope — page</title>
</head>
<body>
<p id="msg">…</p>
<script>
let place = "Garden";
function line() {
let state = "open";
return place + " is " + state;
}
let box = document.getElementById("msg");
box.textContent = line();
</script>
</body>
</html>

Paragraf Garden is open gösterir. place globaldir; state line’a yerlidir. Fonksiyon ikisini okur, bir dizge döndürür, sayfa gösterir. Yalnızca place’i değiştirin, yenileyin, satırı okuyun. Sırada: closures — dış çağrı bittikten sonra dış adları canlı tutan fonksiyonlar.

Alıştırmalar

  1. Global let app = "demo" bildirin; küçük bir fonksiyondan ve dışarıdan loglayın.
  2. Fonksiyon içine let secret = 1 koyun; dışarıda secret logunun hata verdiğini doğrulayın.
  3. if (true) { } içinde let n = 5 bildirin ve loglayın; bloktan sonra tekrar deneyin.
  4. İç içe fonksiyondan dış let’i yeniden bildirmeden okuyun.
  5. Dış let tag = "A" üstüne iç let tag = "B" ile gölge düşün; iki yeri loglayın.
  6. HTML demoda yalnızca place dizgesini değiştirin, yenileyin, paragrafı okuyun.

Sık düşülenler

  • Yerel adı fonksiyon dışında kullanmak — ReferenceError, sessiz boşluk değil
  • Bloktaki var’ın let gibi özel kalmasını beklemek
  • Dış kodun yalnızca iç içe fonksiyonda doğmuş adları gördüğünü sanmak
  • Kapsamı return ile karıştırmak — biri görünürlük, diğeri değer gönderme
  • Burada tam closures dersi beklemek — o sonraki sayfa

Özet

  • Kapsam, bir adın görülebileceği ve kullanılabileceği yerdir
  • Globaller fonksiyon dışında yaşar ve betikte paylaşılır
  • Yereller ve parametreler kendi fonksiyonlarında kalır
  • { } içindeki let/const blok kapsamlıdır; sızan var’dan iyidir
  • İç içe dışa okuyabilir; dış yalnızca-iç adları görmez
  • Aynı adlı iç bağlama dışın üstüne gölge düşürür
  • Sayfa güncellemesi dönen dizgede global ile yereli birleştirebilir
  • Sırada: closures — dış adları anımsayan fonksiyonlar

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

❓
8
Sorular
🎯
70%
Geçmek İçin
♾️
∞
Süre
🔄
∞
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek