⊗jsPmClLEA 261 of 505 menu

Приложение на лексикалната среда на функции в JavaScript

Да предположим, че имаме функция, която връща друга функция като резултат:

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

Ако родителската функция има някакви променливи, тези променливи ще се съдържат в лексикалната среда на върнатата функция:

function test() { let num = 1; // променлива на родителската функция return function() { // лексикална среда = {num: 1} } }

Нека напишем в кода на нашата върната функция console.log, който извежда стойността на променливата num:

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

Сега нека извикаме родителската функция test и запишем резултата от работата й в променлива func:

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

В променливата func ще се запише върнатата функция. Нека извикаме нашата функция - като резултат тя ще изведе съдържанието на променливата num:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // ще изведе 1

Ако просто се опитаме да изведем променливата num извън функцията - тя няма да бъде достъпна:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // променливата num тук не е достъпна

Както виждате, локалната променлива num се свърза с лексикалната среда на нашата функция и сега, като извикаме тази функция навсякъде в кода, можем да получим стойността на променливата num, дори ако на мястото на извикване самата променлива е недостъпна.

Всъщност може да се постигне подобен резултат, като направим променливата num глобална:

function test() { return function() { console.log(num); } } let num = 1; // глобална променлива let func = test(); func(); // ще изведе 1

Тук обще ще има съществена разлика: в новата версия променливата num може да се променя извън функциите (тъй като е глобална), а в старата - не.

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Български
AfrikaansAzə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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне