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.
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.
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.
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.
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.
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.
<!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
- Global
let app = "demo"bildirin; küçük bir fonksiyondan ve dışarıdan loglayın. - Fonksiyon içine
let secret = 1koyun; dışarıdasecretlogunun hata verdiğini doğrulayın. if (true) { }içindelet n = 5bildirin ve loglayın; bloktan sonra tekrar deneyin.- İç içe fonksiyondan dış
let’i yeniden bildirmeden okuyun. - Dış
let tag = "A"üstüne içlet tag = "B"ile gölge düşün; iki yeri loglayın. - HTML demoda yalnızca
placedizgesini değiştirin, yenileyin, paragrafı okuyun.
Sık düşülenler
- Yerel adı fonksiyon dışında kullanmak — ReferenceError, sessiz boşluk değil
- Bloktaki
var’ınletgibi özel kalmasını beklemek - Dış kodun yalnızca iç içe fonksiyonda doğmuş adları gördüğünü sanmak
- Kapsamı
returnile 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çindekilet/constblok kapsamlıdır; sızanvar’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
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 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