Học Javascript 3: Global Environment và Global Object

Bài viết giải thích về Global Execution Context trong JavaScript, cách nó tạo ra Global Object và biến this. Tác giả minh họa cách chạy code JavaScript trong trình duyệt, phân tích cách Global Object được tạo ra là window trong môi trường trình duyệt và khác biệt khi chạy trong các môi trường khác như NodeJS.

Học Javascript 3: Global Environment và Global Object

Global Execution Context là gì

Ở trước, chúng ta đã giải thích Execution Context là gì. Bất cứ khi nào code chạy trong Javascript, nó được chạy bên trong một Execution Context. Sẽ có nhiều Execution Context nhưng cái lớn nhất, 'leader' của các Execution Context khác được gọi là Global Execution Context.

Global Execution Context có gì

Global Execution Context sẽ tạo cho bạn 2 thứ là Global Object và biến là this

global execution context

Để demo, chúng ta sẽ chạy Javascript code

Chạy Javascript code

Ok, sau 3 bài, chúng ta cùng bắt đầu viết những dòng code đầu tiên. Bạn chỉ cần tạo một file index.html và một file .js là được

index.html:

Còn file .js bạn đặt tên gì cũng được, sau đó để 2 file cùng chung folder là được Ok, mình xài Visual Studio Code nên chụp màn hình lại cho bạn dễ hình dung:

javascript chuyên sâu

Bạn lưu code trong file .js rồi mở index.html là xong! Bạn nhớ mở file index.html bằng Google Chrome để xài được Chrome DevTool nhé.

Chrome DevTool

Ok, sau khi mở file index.html lên sẽ có một trang web trắng hiện lên. Bạn nhấn tổ hợp phím Ctrl + Shift + J ( Windows ) hoặc Cmd + Opt + I ( Mac ). Hoặc click phải chuột vào trang web, chọn Inspect

Mở Chrome DevTool

Bạn chọn tab Console để xài Command Line API. Tính năng của cái này nhiều lắm mình không nói hết. Nhưng nó có một tính năng giống như Read–eval–print loop của Python hay Ruby. Tức là gõ code vào cái chạy được luôn, sẽ có 2 trường hợp

  • Bạn có thể chạy các biểu thức toán học, chuỗi, true, false: Ví dụ bên dưới mình gõ 2+2 và nhấn Enter, kết quả sẽ được 4.

Chrome DevTool

Hoặc cộng 2 kí tự:

Chrome DevTool

  • Bạn có thể truy cập giá trị biến, hằng, class, hàm, vv trong file đang chạy. Hiện tại trong ví dụ này là file app.js. Ví dụ mình muốn truy cập biến **age, **thì mình sẽ gõ age vào và nhấn Enter:

Chrome DevTool

Thì nó sẽ báo lỗi vì trong file app.js chưa có biến nào tên **age **hết.

Dễ hiểu mà đúng hem?

Global Object

Quay lại vấn đề của bài hôm nay, như mình đã nói ở trên thì Global Execution Context sẽ tạo cho bạn 2 thứ là Global Object và biến là **this. **Bạn lưu ý là file **app.js **của mình vẫn trống trơn, chưa có code gì nha.

Tiếp theo bạn thử gõ this vào và nhấn Enter:

this trong javascript

Tiếp theo bạn thử gõ window và nhấn Enter:

Bạn nhận được cùng kết quả

Giải thích: Mặc dù file app.js không có gì nhưng nó vẫn chạy, Syntax Parser sẽ chuyển code sang mã máy, do không có code nên nó bỏ qua và không có lỗi. Tiếp theo Global Execution Context sẽ tạo cho bạn 2 thứ là Global Object là window và biến là **this **có giá trị bằng với window luôn.

Vì chúng ta đang chạy JS code trên trình duyệt nên global object là window, nhưng nếu chạy ở môi trường khác như NodeJS thì global object sẽ khác. Bạn có thể xem thêm global object của NodeJS tại đây

Code của bạn

Oke, bạn đã hiểu sơ sơ rồi đúng không. Bây giờ bạn vào file app.js để viết code của riêng mình nhé.

code của bạn

Lưu lại và ra refresh index.html nhé.

Bạn gõ lại window để lấy global object. Sau đó bạn mở object này ra để xem các name-value pair của object window này.

Global Object

Global rốt cuộc là gì

Như ví dụ trên, bạn thấy là cả biến **homepage **và hàm **hello() **đều thuộc global object window.

Vậy global tức là những gì không ở bên trong function

Kết luận

Bạn bắt đầu hình dung được code Javascript chạy được nhờ có Execution Context. Nó tạo thêm cho chúng ta những thứ như global object và this. Ngoài ra còn có Outer Environment - cái này chúng ta sẽ tìm hiểu ở những bài sau.

Related Posts

Discover more content you might enjoy