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 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); //undefinedVariable 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 definedYukarı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 definedYukarı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ştirilemezScope
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); // 10Yukarı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 definedYukarı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 definedYukarı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.