Tôi chỉ tò mò nếu có một thứ như 'đối tượng phạm vi cục bộ' trong JavaScript. Nếu bạn gọi một hàm, nó có một ngữ cảnh (this
), là đối tượng mà nó đã được gọi (function f() {return this;}; obj.f = f; obj.f(); //returns obj;
) và phạm vi được tạo ra trên mọi cuộc gọi hàm. Phạm vi được sử dụng để xác định các biến địa phương như trong ví dụ sau:Đối tượng phạm vi cục bộ
var globalScopeVar = 1;
(function() {
var localScopeVar = 2;
})();
Trong cả hai phạm vi this
đề cập đến bối cảnh toàn cầu (thông thường, window
), kể từ khi chức năng chưa được gọi vào bất kỳ đối tượng. Tuy nhiên, điều tôi quan tâm là 'đối tượng phạm vi', tức là đối tượng trong đó các biến trong phạm vi được xác định. Đối với phạm vi toàn cầu này là thường window
, giống như bối cảnh toàn cầu:
window.globalScopeVar; // 1
Tuy nhiên, các 'đối tượng phạm vi' trong phạm vi địa phương của một cuộc gọi chức năng là gì? Liệu nó có tồn tại hay không? Có cách nào để truy cập một đối tượng trong đó localScopeVar
được xác định không?
(function() {
var localScopeVar = 2;
localScope.localScopeVar; // 2
})();
localScope
trong ví dụ này là gì?
* "Hiện nó có tồn tại hoặc có thể truy cập không?" * Có, nó tồn tại, nhưng không, bạn không thể truy cập. – dfsq
Tôi nghĩ "localScope" là phạm vi của việc đóng cửa ngay lập tức, được xác định trong dòng đầu tiên. Vì đóng cửa này về cơ bản là một hàm ẩn danh, được thực thi ngay lập tức (dòng: 4), bạn không thể tham chiếu nó. –
Thông báo, các đối tượng đó không tạo phạm vi, chỉ có các chức năng. Phạm vi này theo nghĩa đen được ghi vào tệp tập lệnh và bạn không thể thay đổi nó theo cách lập trình. Ngoài ra, một hàm không nhận thức được đối tượng được xác định, trừ khi bạn không tạo một biến chứa thông tin này. – Teemu