⊗jsPmClCNG 265 of 505 menu

Pasaulinė skaitiklio kintamoji JavaScript

Iškelkime kintamąjį num už funkcijų ribų, taip padarydami jį pasauliniu:

let num = 1; // pasaulinis kintamasis function test() { return function() { console.log(num); num++; }; }

Šiuo atveju visos grąžinamos funkcijos keis šį pasaulini kintamąjį ir skaitikliai veiks priklausomai vienas nuo kito:

let num = 1; function test() { return function() { console.log(num); num++; }; } let func1 = test(); // pirmas skaitiklis func1(); // išves 1 func1(); // išves 2 let func2 = test(); // antras skaitiklis func2(); // išves 3 func2(); // išves 4

Kodėl mūsų ankstesnis kodas darė nepriklausomus skaitiklius? Priminsiu šį kodą:

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

Reikalas tas, kad kintamasis num yra lokalus funkcijos test viduje. Todėl kiekvienas test iškvietimas sukuria savo lokalų kintamąjį.

Todėl grąžinamos funkcijos nuorodos kiekviena į savo funkcijos test lokalų kintamąjį. Būtent taip ir pasiekiamas nepriklausomumas veikimo.

Jei padarytume num pasauliniu kintamuoju - tai taip pat bus uždaroji funkcija. Tiesiog leksinės grąžinamų funkcijų aplinkos nuoroda į tą patį kintamąjį num - bet kokie pakeitimai su šiuo kintamuoju bus matomi visose funkcijose.

Nustatykite, nepaleisdami kodo, kas bus išvesta į konsolę:

let counter = 0; function test() { return function() { console.log(counter); counter++; }; } let func = test; let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();

Nustatykite, nepaleisdami kodo, kas bus išvesta į konsolę:

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();

Nustatykite, nepaleisdami kodo, kas bus išvesta į konsolę:

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();
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti