Welcome to Comedown's Blog Technology !
Loading...

Javascript execution context

Người đăng: Unknown Thứ Tư, 15 tháng 7, 2009 Lượt xem: counter

The Execution Context

Execution context là một khái niệm trừu tượng, được đặc tả bởi ECMSScript specification (ECMA 262 3rd edition). Nó có thể được xem như là các objects cùng với những properties (nhưng không phải là public properties).

Tất cả các javascript code được executed trong một execution context. Global code (code được execute inline, hoặc trong JS file, hoặc HTML page...) được execute trong global execution context và mỗi một lời gọi hàm sẽ có một conetxt object đi kèm với nó. Code được execute bằng hàm eval cũng có một execution context riêng, nhưng vì eval không thường được sử dụng bởi javascript programmer nên nó sẽ không được discuss ở đây. (các bạn có thể xem đặc tả của nó trong section 10.2 của ECMA 262)

Khi một javascript function được gọi, nó bước vào một execution context. Nếu một function khác được gọi (hoặc gọi lại chính nó theo cách gọi đệ quy) thì một execution context mới sẽ được tạo ra và lời gọi hàm sẽ enter vào context đó cho đến khi nó trả ra kết quả. Việc này dẫn đến javascript code hình thành nên một stack các execution context trong quá trình gọi.

Khi một execution context được tạo ra, một số việc sẽ xảy ra theo một thứ tự được định nghĩa trước. Đầu tiên, trong execution context của một function, một "Activation" object được tạo ra. Activation object này là một cơ chế đặc tả khác. Nó có thể được xem như là một object vì nó có các properties có thể truy xuất được. Nhưng nó không phải là một object bình thường vì nó không có prototype và không thể được reference trực tiếp bằng javascript code.

Bước tiếp theo của việc tạo ra execution context cho một lời gọi hàm là việc tạo ra argument object, là một object giống như array với các index là các số interger tương ứng với thứ tự của các parameter được truyền vào. Nó cũng có length và callee property. Một property của Activation object được tạo ra với tên là "arguments" và trỏ đến object này.

Bước tiếp theo execution context được gán vào một scope. Scope bao gồm một danh sách (hoặc một dây - chain) các objects. Mỗi function object có một property bên trong tên là [[scope]] và nó cũng chứa một danh sách các object. Scope gán cho execution context cho một function là một danh sách được tham khảo bởi [[scope]] property của function object đó với một chút thay đổi là Activation object sẽ được thêm vào đầu tiên của danh sách.

Quá trình khởi tạo các variables diễn ra bằng cách sử dụng một object gọi là "Variable" object (tham khảo ECMA 262 phần khởi tạo biến 10.1.3). Thật sự, Activation object và Variable object là một (!!!). Các properties được đặt tên cho Variable object được tạo ra cho mỗi parameters của function, và nếu các arguments của lời gọi hàm tương ứng với các các parameters này, giá trị của chúng sẽ được gán cho các properties của Variable object (các giá trị default sẽ là undefined). Các inner function được định nghĩa bên trong sẽ tạo ra các function objects và được gán thành các properties của Variable object với tên tương ứng là tên của các inner function. Bước cuối cùng trong quá trình khởi tạo biến là tạo ra các properties với tên tương ứng với các local variables được khai báo bên trong function.

Các properties được tạo trên Variable object tương ứng với các biến cục bộ được khai báo bên trong hàm ban đầu sẽ được gán giá trị là undefined, sau đó việc khởi tạo thật sự sẽ diễn ra trong quá trình evaluation của assignment expression bên trong thân hàm.

Sự kiện Activation object - cùng với property arguments của nó - và Variable object - cùng với các properties có tên tương ứng các local variables - cùng chỉ đến một object cho phép arguments được đối xử như là biến local của function.

Cuối cùng, nếu một giá trị được gán đang tham khảo đến một object mà sau đó các tác vụ truy xuất property có prefix là keyword this, thì nó sẽ dùng giá trị của object đó. Nếu không có từ khóa this hoặc giá trị được gán là null (tức là không nằm trong một object nào đó), nó sẽ refer đến global object.

Global execution context có một vài khác biệt nhỏ vì nó không có arguments nên nó không cần phải có một Activation object tham khảo đến nó. Global execution context thật sự cần một scope và scope chain của nó chỉ chứa một object, đó là global object. Trong quá trình duyệt để khởi tạo biến của global object, nó sẽ được dùng như một Variable object, do đó các biến toàn cục (hoặc các hàm top-level function) sẽ được tạo thành các properties với cùng tên, giống như mô tả ở trên.


Nguồn :-Dzinh on tech

0 nhận xét

Đăng nhận xét

1. Vui lòng nhập tiếng việt có dấu.
2. Không sử dụng từ ngữ thô tục, trái với thuần phong mỹ tục.
3. Nội dung phải liên quan tới chủ đề bài viết, bạn có thể sử dụng một số thẻ HTML như <b>, <i>, <a>
4. Những nhận xét mang tính chất Đồi trụy, Quảng cáo, Spam hoặc không có tính xây dựng... sẽ bị xóa vĩnh viễn mà không cần báo trước.

Bài đăng Mới hơn Bài đăng Cũ hơn Trang chủ
Blogumulus by Roy Tanck and Amanda FazaniInstalled by CahayaBiru.com

Followers

Cộng đồng Blogger

Comedown's Blog
TruongGTGR - Nơi siêu xe hội tụ
Tư vấn tin học