JavaScript’te değişkenler hakkında ilginç olan olaylardan biri ise, tanımladığınız değişkene daha önceki satırlardan rahatlıkla erişebilmenize olanak tanımasıdır. Bu kavrama hoisting (yukarı alma) denir. JavaScript’te tanımlanan değişkenler yorumlanırken tanımladığınız değişkenler fonksiyon veya ifadenin yukarısına alınarak yorumlanır. Yukarıya alınan değişkenler atandıkları değer yerine undefined değerini alır. Hatta bu değişkeni kullandıktan sonra tekrar tanımlarsanız, yine undefined sonucunu alırsınız.

/**
 * Örnek 1
 */
console.log(x === undefined); // "true" yazar
var x = 3;

/**
 * Örnek 2
 */
// undefined değeri alacak
var degiskenim = "değerim";
 
(function() {
  console.log(degiskenim); // undefined
  var degiskenim = "yerel değerim";
})();

Yukarıdaki örnek yorumlayıcılar tarafında aşağıdaki şekilde yorumlanır.

/**
 * Örnek 1
 */
var x;
console.log(x === undefined); // "true" yazar
x = 3;
 
/**
 * Örnek 2
 */
var degiskenim = "değerim";
 
(function() {
  var degiskenim;
  console.log(degiskenim); // undefined yazar
  degiskenim = "yerel değerim";
})();

Hoisting ile ilgili sorunların yaşanmaması için, fonksiyonların içerisinde yer alan bütün değişken tanımlarını mümkün olduğunca en üstte tanımlanmalıdır. Değişken tanımlamanın en iyi yolu da zaten budur. Bu sayede kodun da okunabilirliliği artmış olur.

ECMAScript 2015’te let veya const ifadesi ile tanımlanan değişken, üste alınmaz. Değişken tanınımdan önce o değişken kullanılmaya çalışılırsa ReferenceError hatası ile sonuçlanır. Değişken, bloğun başlangıcından itibaren tanımının yapıldığı yere kadar kadar geçici (temporal dead zone) bölgededir.

Kaynaklar : https://developer.mozilla.org

0 cevaplar

Cevapla

Want to join the discussion?
Feel free to contribute!

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir