გლობალური ცვლადი-თვლარი JavaScript-ში
ცვლადი num გამოვაღოთ ფუნქციების გარეთ,
რითაც ის გლობალურს ვხდით:
let num = 1; // გლობალური ცვლადი
function test() {
return function() {
console.log(num);
num++;
};
}
ამ შემთხვევაში, ყველა დაბრუნებული ფუნქცია შეცვლის ამ გლობალურ ცვლადს და თვლარები უკვე ერთმანეთზე იქნებიან დამოკიდებულნი:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // პირველი თვლარი
func1(); // გამოიტანს 1-ს
func1(); // გამოიტანს 2-ს
let func2 = test(); // მეორე თვლარი
func2(); // გამოიტანს 3-ს
func2(); // გამოიტანს 4-ს
რატომ აკეთებდა ჩვენი წინა კოდი დამოუკიდებელ თვლარებს? შეგახსენებთ ამ კოდს:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
საქმე იმაშია, რომ ცვლადი num ლოკალურია
test ფუნქციის შიგნით. ამიტომ ყოველი
test-ის გამოძახება ქმნის საკუთარ ლოკალურ
ცვლადს.
ამიტომ, დაბრუნებული ფუნქციები მიბმულნი იქნებიან
თითოეული test ფუნქციის საკუთარ ლოკალურ
ცვლადზე. სწორედ ასე მიიღწევა მათი მუშაობის
დამოუკიდებლობა.
num-ის გლობალურ ცვლადად გამოცხადება
- ესეც ჩაკეტვაა. უბრალოდ, დაბრუნებული ფუნქციების
ლექსიკური გარემოები ერთსა და იმავე ცვლად num-ზე
მიუთითებენ - ნებისმიერი ცვლილება ამ ცვლადში
ყველა ფუნქციაში იქნება ხილული.
განსაზღვრეთ, კოდის გაშუქების გარეშე, რა დაიწერება კონსოლში:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
განსაზღვრეთ, კოდის გაშუქების გარეშე, რა დაიწერება კონსოლში:
function test() {
let counter = 0;
return function() {
return function() {
console.log(counter);
counter++;
};
};
}
let func = test()();
let func1 = func;
let func2 = func;
func1();
func2();
func1();
func2();
განსაზღვრეთ, კოდის გაშუქების გარეშე, რა დაიწერება კონსოლში:
function test() {
let counter = 0;
return function() {
return function() {
console.log(counter);
counter++;
};
};
}
let func = test();
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();