⊗jsPmClLEA 261 of 505 menu

Funktionien leksikaalisen ympäristön soveltaminen JavaScriptissä

Oletetaan, että meillä on funktio, joka palauttaa tuloksenaan toisen funktion:

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

Jos vanhempifunktiolla on muuttujia, niin nämä muuttujat sisältyvät palautetun funktion leksikaaliseen ympäristöön:

function test() { let num = 1; // vanhempifunktion muuttuja return function() { // leksikaalinen ympäristö = {num: 1} } }

Kirjoitetaan palautettavan funktion koodiin console.log, joka tulostaa muuttujan num arvon:

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

Kutsutaan nyt vanhempifunktiota test ja tallennetaan sen tuloksena saatu arvo muuttujaan func:

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

Muuttujaan func tallentuu palautettu funktio. Kutsutaan funktiota - sen tuloksena se tulostaa muuttujan num sisällön:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // tulostaa 1

Jos yrittää yksinkertaisesti tulostaa muuttujan num funktion ulkopuolella - se ei ole saatavilla:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // muuttuja num ei ole saatavilla täällä

Kuten näette, paikallinen muuttuja num sitoutui funktiomme leksikaaliseen ympäristöön ja nyt, kutsumalla tätä funktiota missä tahansa koodin kohdassa, voimme saada muuttujan num arvon, vaikka itse muuttuja ei olisikaan saatavilla kutsukohdassa.

Itse asiassa samaan tulokseen voidaan päästä tekemällä muuttuja num globaaliksi:

function test() { return function() { console.log(num); } } let num = 1; // globaali muuttuja let func = test(); func(); // tulostaa 1

Tässä on kuitenkin merkittävä ero: uudessa versiossa muuttujaa num voidaan muuttaa funktioiden ulkopuolella (koska se on globaali), kun taas vanhassa - ei.

Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } let func = test(); console.log(func());

Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } console.log(test()());

Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:

function test() { let num1 = 1; return function() { return num1 + num2; } } let num2 = 2; let func = test(); console.log(func());

Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää