Лакальная пераменная лічыльніка ў JavaScript
Разгледзім наступны код:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
test()(); // выведзе 1
test()(); // выведзе 1
Чаму заўсёды будзе выводзіцца лік 1? Для
таго, каб зразумець гэта, перапішам наш код
па-іншаму:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
let func1 = test(); //!! першая функцыя
func1(); //выведзе 1
let func2 = test(); //!! другая функцыя
func2(); //выведзе 1
Гэта значыць кожны выклік функцыі test
такім чынам: test()(), стварае сваю
функцыю са сваім замыканнем і адразу ж выклікае
гэтую функцыю.
Вызначыце, не запускаючы код, што выведзецца ў кансоль:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
func()();
func()();
func()();
Вызначыце, не запускаючы код, што выведзецца ў кансоль:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
let test = func;
test()();
test()();
test()();