Функсияҳои 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());