АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗jsPmClLEA 261 of 505 menu

Ужыванне лексічнага асяроддзя функцый у JavaScript

Няхай у нас ёсць функцыя, сваім вынікам якая вяртае іншую функцыю:

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

Калі бацькоўская функцыя мае якія-небудзь зменныя, то гэтыя зменныя будуць утрымлівацца ў лексічным асяроддзі якая вяртаецца функцыі:

function test() { let num = 1; // зменная бацькоўскай функцыі return function() { // лексічнае асяроддзе = {num: 1} } }

Напішам у кодзе нашай якая вяртаецца функцыі алерт, які выводзіць у кансоль значэнне зменнай 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());
byenru