⊗jsPmClLEA 261 of 505 menu

Toepassing van Funksie Leksikale Omgewing in JavaScript

Gestel ons het 'n funksie wat 'n ander funksie as sy resultaat teruggee:

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

As die ouerfunksie enige veranderlikes het, dan sal hierdie veranderlikes in die leksikale omgewing van die teruggekeerde funksie bevat wees:

function test() { let num = 1; // veranderlike van die ouerfunksie return function() { // leksikale omgewing = {num: 1} } }

Laat ons console.log in die kode van ons teruggekeerde funksie skryf wat die waarde van die veranderlike num uitdruk:

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

Kom ons roep nou die ouerfunksie test en skryf die resultaat van sy werk in die veranderlike func:

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

Die teruggekeerde funksie sal in die veranderlike func geskryf word. Kom ons roep ons funksie - dit sal die inhoud van die veranderlike num as sy resultaat uitdruk:

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

As ons bloot die veranderlike num buite die funksie probeer uitdruk - sal dit onbeskikbaar wees:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // veranderlike num is hier onbeskikbaar

Soos jy kan sien, het die plaaslike veranderlike num aan die leksikale omgewing van ons funksie geheg geraak en nou, deur hierdie funksie enige plek in die kode te roep, kan ons die waarde van die veranderlike num kry, selfs al is die veranderlike op die roep-plek op sigself onbeskikbaar.

Trouens, 'n soortgelyke resultaat kan bereik word deur die veranderlike num globaal te maak:

function test() { return function() { console.log(num); } } let num = 1; // globale veranderlike let func = test(); func(); // sal 1 uitdruk

Hier sal daar egter 'n wesenlike verskil wees: in die nuwe weergawe kan die veranderlike num buite funksies verander word (aangesien dit globaal is), maar in die ou weergawe - nie.

Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:

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

Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:

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

Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:

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

Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp