Biến Cục Bộ Bộ Đếm trong JavaScript
Hãy xem xét đoạn mã sau:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
test()(); // sẽ hiển thị 1
test()(); // sẽ hiển thị 1
Tại sao luôn hiển thị số 1? Để
hiểu điều này, hãy viết lại mã của chúng ta
theo cách khác:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
let func1 = test(); //!! hàm đầu tiên
func1(); //sẽ hiển thị 1
let func2 = test(); //!! hàm thứ hai
func2(); //sẽ hiển thị 1
Tức là mỗi lệnh gọi hàm test
theo cách này: test()(), đều tạo ra một
hàm riêng với closure của nó và ngay lập tức gọi
hàm đó.
Xác định, không chạy mã, điều gì sẽ được hiển thị trong bảng điều khiển:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
func()();
func()();
func()();
Xác định, không chạy mã, điều gì sẽ được hiển thị trong bảng điều khiển:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
let test = func;
test()();
test()();
test()();