Làm thế nào là nó làm việc?
Khi bạn khai báo hàm trong ngữ cảnh thực thi, một ràng buộc được thêm vào môi trường biến của ngữ cảnh đó. Khi bạn tham chiếu một số nhận dạng, môi trường biến hiện tại được kiểm tra để xem liệu một ràng buộc có tồn tại cho mã định danh đó hay không.
Nếu không có ràng buộc tồn tại, môi trường biến bên ngoài được chọn, v.v., sao lưu vào phạm vi toàn cục.
Vì vậy:
// OUTER SCOPE
// Binding exists for 'example'
function example() {
// INNER SCOPE
// No binding for 'example'
// References 'example' in outer scope
example.x = 1;
}
gì là vấn đề ẩn trong này?
Không có (nói chung ... mặc dù đó là giải pháp phù hợp với bạn tùy thuộc vào những gì bạn đang cố gắng làm).
Bạn đang tạo tài sản "tĩnh" một cách hiệu quả. Khi các hàm JavaScript là lớp đầu tiên, bạn có thể đặt các thuộc tính trên chúng như bạn làm với bất kỳ đối tượng nào khác.
Lưu ý rằng hành vi này là khác nhau nếu bạn có một tên chức năng biểu, chứ không phải là khai báo hàm:
var x = function example() {
// Identifier 'example' is only in scope in here
};
Nguồn
2013-07-31 10:24:12
Có thể trùng lặp [Static các biến trong JavaScript] (http://stackoverflow.com/questions/1535631/static-variables-in-javascript/1535687#1535687) – Givi
trong hàm js cũng là đối tượng để bạn có thể thêm thuộc tính vào nó, –
Hãy xem [ *** jsFiddle ***] (http://jsfiddle.net/GKDev/TdF94/) * có thể đây là những gì bạn muốn biết. * – Givi