Глобална променљива бројача у 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();