mi/>

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 varlet veya constdeklarasyonları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 :

varanahtar 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, varanahtar kelimesi ile xve 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 :

letanahtar 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, zdeğ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.