Globalna spremenljivka števca v JavaScript
Postavimo spremenljivko num zunaj funkcij,
s čimer jo naredimo globalno:
let num = 1; // globalna spremenljivka
function test() {
return function() {
console.log(num);
num++;
};
}
V tem primeru bodo vse vrnjene funkcije spreminjale to globalno spremenljivko in števci bodo delovali odvisno drug od drugega:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // prvi števec
func1(); // izpiše 1
func1(); // izpiše 2
let func2 = test(); // drugi števec
func2(); // izpiše 3
func2(); // izpiše 4
Zakaj je naša prejšnja koda ustvarila neodvisne števce? Spomnimo se te kode:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Bistvo je v tem, da je spremenljivka num lokalna
znotraj funkcije test. Zato vsak
klic test ustvari svojo lokalno
spremenljivko.
Zato se bodo vrnjene funkcije sklicevale
vsaka na svojo lokalno spremenljivko funkcije
test. Prav tako se doseže neodvisnost
delovanja.
Če naredimo num globalno spremenljivko
- bo to prav tako zaklepanje. Preprosto leksikalna
okolja vrnjenih funkcij se sklicujejo
na isto spremenljivko num - vse
spremembe te spremenljivke bodo vidne v
vseh funkcijah.
Določite, brez zaganjanja kode, kaj se bo izpisalo v konzolo:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Določite, brez zaganjanja kode, kaj se bo izpisalo v konzolo:
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();
Določite, brez zaganjanja kode, kaj se bo izpisalo v konzolo:
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();