Javascript'de Değişkenler ve Scope Yapısı | JS-101
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
deklarasyonlarından biri kullanılarak deklare edilir.
Variable Declaration
Değer atamadan sadece değişken oluşturma işlemine Variable Declaration denilmektedir.
var album; //Variable declaration
console. log(album); //undefined
Variable Initialization
Bir değişkene ilk değeri atama işlemine Variable Initialization denmektedir.
quote = "uzaylılar tarafından, evet tarafından"; //Variable initialization
console.log(quote); //uzaylılar tarafından, evet tarafından
‘var’ ‘let’ ‘const’ Nedir ?
JavaScript'te değişken tanımlamak için üç anahtar kelime vardır: var
, let
ve const
. İşlevleri ve kullanımları açısından farklılıkları vardır.
var
Anahtar Kelimesi :
var
anahtar kelimesi, ES5 sürümünden önce kullanılan bir anahtar kelimedir. Bu anahtar kelimesi ile tanımlanan değişkenler global veya fonksiyon kapsamına sahip olur.
var x = 10; // global değişken
function foo() {
var y = 20; // fonksiyon kapsamı
console.log(x); // 10
console.log(y); // 20
}
foo(); // 10, 20
console.log(x); // 10
console.log(y); // ReferenceError: y is not defined
Yukarıdaki örnekte, var
anahtar kelimesi ile x
ve y
değişkenleri tanımlanmıştır. x
değişkeni global olarak tanımlanmıştır, bu nedenle fonksiyon içinde ve dışında erişilebilirken, y
değişkeni yalnızca fonksiyon içinde erişilebilir.
let
Anahtar Kelimesi :
let
anahtar kelimesi, ES6 sürümünden sonra tanıtılmıştır ve blok kapsamına sahiptir.
let x = 10; // blok kapsamı
function foo() {
let y = 20; // blok kapsamı
if (true) {
let x = 30; // blok kapsamı
let z = 40; // blok kapsamı
console.log(x); // 30
console.log(y); // 20
console.log(z); // 40
}
console.log(x); // 10
console.log(y); // 20
console.log(z); // ReferenceError: z is not defined
}
foo(); // 30, 20, ReferenceError
console.log(x); // 10
console.log(y); // ReferenceError: y is not defined
Yukarıdaki örnekte, let
anahtar kelimesi ile x
, y
ve z
değişkenleri tanımlanmıştır. x
değişkeni, foo()
fonksiyonunda blok kapsamında tanımlanmıştır, bu nedenle bloğun dışındaki x
ile farklı bir değişkendir. y
ve z
değişkenleri de blok kapsamında tanımlanmıştır, bu nedenle yalnızca blok içinde erişilebilirler.
const
Anahtar Kelimesi
const
anahtar kelimesi, let
anahtar kelimesine benzer şekilde blok kapsamına sahiptir. Ancak, const
anahtar kelimesi ile tanımlanan değişkenlerin değerleri sabit olarak kalır ve sonradan değiştirilemez.
const PI = 3.14159;
console.log(PI); // 3.14159
PI = 3; // hata verir, PI değiştirilemez
Scope
Scope uygulamamızda ki değişkenlerin ve fonksiyonların nerelerde erişilebilir, nerelerde erişilemez olduklarını belirler.
Global Scope
Gobal scope, kodun her yerinden erişilebilen değişkenlerin tanımlandığı kapsamdır.
var x = 10; // Global değişken
function foo() {
console.log(x); // 10
}
foo(); // 10
console.log(x); // 10
Yukarıdaki örnekte, x değişkeni global olarak tanımlanmıştır, bu nedenle foo() fonksiyonu tarafından erişilebilir ve ayrıca foo() dışında da kullanılabilir.
Function Scope
Fonksiyon kapsamı, bir fonksiyon içinde tanımlanan değişkenlerin geçerli olduğu kapsamdır.
function bar() {
var y = 20; // Fonksiyon kapsamı
console.log(y); // 20
}
bar(); // 20
console.log(y); // ReferenceError: y is not defined
Yukarıdaki örnekte, y
değişkeni bar()
fonksiyonunda tanımlanmıştır. Bu nedenle, yalnızca bar()
fonksiyonu içinde geçerlidir ve dışarıdan erişilemez.
Block Scope
ES6 (ECMAScript 2015) ile birlikte, JavaScript'te blok kapsamı da tanıtılmıştır. Blok kapsamı, if, for, while gibi blok ifadelerinde tanımlanan değişkenlerin geçerli olduğu kapsamdır.
if (true) {
let z = 30; // Blok kapsamı
console.log(z); // 30
}
console.log(z); // ReferenceError: z is not defined
Yukarıdaki örnekte, z
değişkeni if
bloğu içinde tanımlanmıştır. Bu nedenle, yalnızca if
bloğu içinde geçerlidir ve dışarıdan erişilemez. Dikkat edilmesi gereken önemli bir nokta, blok kapsamı için kullanılan anahtar kelime let
ya da const
dur. var
anahtar kelimesi blok kapsamını desteklemez.