JavaScript'te Fonksiyonların Dış Değişkenlere Erişimi

Aşağıdaki kodu inceleyelim:

javascriptlet num = 1; // değişkene değer atıyoruz

function func() {
  console.log(num); // değeri konsola yazdırıyoruz
}

func(); // fonksiyonu çağırıyoruz

Daha önce de belirttiğim gibi, değişkenin değeri fonksiyon tanımından önce olmak zorunda değildir, önemli olan fonksiyon çağrısından önce olmasıdır:

javascriptfunction func() {
  console.log(num);
}

let num = 1;
func();

Aslında bu tam olarak doğru değil. Fonksiyonumuz çağrılmadan önce bile num değişkeninin değerini bilir:

javascriptlet num = 1;

function func() {
  console.log(num); // fonksiyon num = 1 olduğunu zaten biliyor
}

İşte daha karmaşık bir örnek:

javascriptlet num = 1; // fonksiyon bu anda num = 1 olduğunu öğrenir

function func() {
  console.log(num);
}

num = 2; // fonksiyon bu anda num = 2 olduğunu öğrenir

Fonksiyon çağrıları ekleyelim:

javascriptlet num = 1; // fonksiyon bu anda num = 1 olduğunu öğrenir
func(); // 1 yazdırır

function func() {
  console.log(num);
}

func(); // 1 yazdırır
num = 2; // fonksiyon bu anda num = 2 olduğunu öğrenir
func(); // 2 yazdırır

Tekrar edeyim: aslında fonksiyon, çağrılmamış olsa bile dış değişkenlerin değerlerini bilir.