Fonksiyonların Sözcüksel Çevresinin JavaScript'te Uygulanması

Diyelim ki sonucu başka bir fonksiyon döndüren bir fonksiyonumuz var:

javascriptfunction test() {
  return function() {
    
  }
}

Eğer ana fonksiyonun herhangi bir değişkeni varsa, bu değişkenler döndürülen fonksiyonun sözcüksel çevresinde yer alacaktır:

javascriptfunction test() {
  let num = 1; // ana fonksiyonun değişkeni
  
  return function() {
    // sözcüksel çevre = {num: 1}
  }
}

Döndürdüğümüz fonksiyonun koduna, değişkenin değerini console.log ile yazdıran bir kod ekleyelim:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

Şimdi test ana fonksiyonunu çağıralım ve sonucunu func değişkenine kaydedelim:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();

func değişkenine döndürülen fonksiyon yazılacaktır. Fonksiyonumuzu çağıralım - sonucu num değişkeninin içeriğini yazdıracaktır:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();
func(); // 1 yazdırır

Eğer num değişkenini fonksiyonun dışında yazdırmaya çalışırsak - erişilemez olacaktır:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

console.log(num); // num değişkeni burada erişilemez

Gördüğünüz gibi, yerel num değişkeni fonksiyonumuzun sözcüksel çevresine bağlandı ve şimdi, bu fonksiyonu kodun herhangi bir yerinde çağırarak, num değişkeninin değerini alabileceğiz, bu değişkenin çağrı yapılan yerde kendi başına erişilemez olması bile önemli değil.

Aslında benzer bir sonuca, num değişkenini global yaparak da ulaşılabilir:

javascriptfunction test() {
  return function() {
    console.log(num);
  }
}

let num = 1; // global değişken
let func = test();
func(); // 1 yazdırır

Ancak burada önemli bir fark olacak: yeni versiyonda num değişkeni fonksiyonların dışında değiştirilebilir (çünkü global), ancak eskisinde - değiştirilemez.

Задание 1

Kodu çalıştırmadan, konsola ne yazdırılacağını belirleyin:

javascriptfunction test() {
  let num1 = 1;
  let num2 = 2;
  
  return function() {
    return num1 + num2;
  }
}

let func = test();
console.log(func());
Задание 2

Kodu çalıştırmadan, konsola ne yazdırılacağını belirleyin:

javascriptfunction test() {
  let num1 = 1;
  let num2 = 2;
  
  return function() {
    return num1 + num2;
  }
}

console.log(test()());
Задание 3

Kodu çalıştırmadan, konsola ne yazdırılacağını belirleyin:

javascriptfunction test() {
  let num1 = 1;
  
  return function() {
    return num1 + num2;
  }
}

let num2 = 2;
let func = test();
console.log(func());
Задание 4

Kodu çalıştırmadan, konsola ne yazdırılacağını belirleyin:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    return num;
  }
}

let num = 2;
let func = test();
console.log(func());