phép nói rằng chúng tôi đã xác định function
này trong phạm vi toàn cầu:mảnh cuối cùng của việc đóng cửa javascript tôi stil không hiểu
function createCounter() {
var counter = 0;
function increment() {
counter = counter + 1;
console.log("Number of events: " + counter);
}
return increment;
}
Trong hầu hết các ví dụ giải thích đóng cửa tôi thấy thực hiện:
createCounter();
từ phạm vi toàn cầu sẽ chỉ trả lại hàm bên trong:
function increment() {
counter = counter + 1;
console.log("Number of events: " + counter);
}
Bây giờ tạo nên tổng số cảm giác e, vì dòng này trong tờ khai createCounter
chức năng
return increment;
Vì vậy, câu hỏi của tôi là, tại sao điều này:
var counter1 = createCounter();
counter1();
Number of events: 1 //result
Cuối cùng có được những chức năng để làm việc?
Về cơ bản không phải là counter1
và createCounter
cả hai con trỏ đến chức năng bên trong đó tồn tại trong phạm vi toàn cầu?
Có thể cách tốt hơn để hỏi đây là lý do tại sao counter1()
hoạt động và không chỉ trả về hàm bên trong như createCounter
?
* "Về cơ bản không phải là 'counter1' và' createCounter' cả con trỏ vào đó chức năng bên trong" * số 'counter1' đề cập đến' increment function() 'rõ ràng là một hàm khác với' hàm createCounter() '. Bạn có thể dễ dàng xác minh điều này bằng cách so sánh chúng: 'counter1 === createCounter' là' false'. Đặt một cách khác: 'createCounter' trả về một hàm mới/khác, nó không trả về chính nó. –