Một "bản dịch miễn phí" có thể là: "out of scope" - variables
.
Vì ECMAscript sử dụng phạm vi từ vựng, biến miễn phí là biến được xác định trong phạm vi gốc và được tìm kiếm bằng tìm kiếm chuỗi phạm vi.
(function _outerScope() {
var foo = 42;
(function _innerScope() {
var bar = 100;
console.log(foo + bar); // 142
}());
}());
Trong ví dụ trên, foo
là một miễn phí biến trong bối cảnh của _innerScope
. nó trở nên rất rõ ràng nếu chúng ta có một cái nhìn nhanh chóng vào các khái niệm cơ bản của ECMAscript.
Một Context được liên kết với một đối tượng Hoạt (trong ES3), tương ứng một từ vựng Môi trường Ghi (trong ES5), trong đó có những câu như: function declarations
, variables declared with var
và formal paramters
, cũng như một tham chiếu đến tất cả Đối tượng kích hoạt gốc/Môi trường thực tế. Nếu cần phải truy cập biến, công cụ ECMAscript đầu tiên sẽ xem xét AOs/LEs từ chính hiện tại Ngữ cảnh chính nó; nếu không tìm thấy nó ở đó, nó sẽ nhìn vào phụ huynh AO 's/LE' s.
Vì bất kỳ Context lưu trữ dữ liệu này trong một cấu trúc mảng giống như (đừng quên chúng ta đang nói về mức độ thực hiện ở đây, không Javascript chính nó), chúng ta đang nói về Lexical Scope
, bởi vì chúng tôi tìm kiếm thông qua tất cả parent Contexts theo thứ tự.
Biến miễn phí chỉ đơn giản là một biến không được khai báo bên trong một hàm đã cho, nhưng được sử dụng bên trong nó. –