- vừa được xem lúc

Lexical environment trong JavaScript

0 0 6

Người đăng: BeautyOnCode

Theo Viblo Asia

Trước khi tìm hiểu về scope, scope chain, hay cả closures, bạn cần hiểu về Lexical Environment.

Đây là một khái niệm nền tảng trong JavaScript.

Execution Context và Callstack

Nhắc lại từ bài “Điều gì xảy ra khi chạy một chương trình JavaScript ?”, mỗi khi chương trình JavaScript thực thi, sẽ khởi tạo ra các “Execution Context”

Và có hai giai đoạn của execution context là “Memory Creation”“Code Execution”.

Ví dụ có đoạn code sau:

function x () { var b = 10; y(); function y () { var c = 5; }
} x();

thì sơ đồ mô tả các execution context và callback được tạo với chương trình trên như sau:

Lexical Environment & Scope Chain

Mình đã chọn hình cover cho bài viết này là hình ảnh trái đất nhìn từ ngoài vũ trụ, là điểm tương đồng khi nói về lexical environment. Cùng tìm hiểu nhé!

Lexical là gì?

“Lexical” tiếng anh có nghĩa là sự kết nối từ bên ngoài theo một thứ tự nào đó.

Lexical Enviroment là gì?

“Lexical Environment” của hàm bao gồm local memory của hàm đó cộng với “Lexical Environment” của cha nó.

Ví dụ có hàm y ở trên nằm lồng trong hàm x (y con của x), và hàm x nằm bên trong global scope (x con của global).

Hay còn gọi y is lexically inside the x function. x is lexically inside global.

Ngay khi một “Execution Context” khởi tạo, một “Lexical Environment” cũng đồng thời được khởi tạo.

Cùng xem parent’s lexical environment tương ứng ở ví dụ trên:

Lexical Environment sẽ gồm local memoryparent lexical environment được biểu diễn với vòng tròn màu tím bên dưới.

Scope Chain

Nhìn vào hình trên bạn có thấy được cách chương trình tìm kiếm các giá trị của biến không ?

Thứ tự tìm sẽ từ vòng tím của y sang vòng tím của x rồi sang vòng tím của global và vẫn tìm không thấy thì sẽ gặp null và kết thúc quá trình tìm kiếm này.

Giả sử tại vòng tím x không tồn tại c như trên, thì chương trình sẽ tiếp tục tìm kiếm xem ở các vòng tím y, rồi đến global.

Nếu vẫn không tìm thấy sẽ báo lỗi. Nếu có tìm thấy tại đâu trước thì sẽ ưu tiên dùng giá trị tại chỗ đó.

Đây chính là các mà JS Engine tìm kiếm từ trong ra ngoài, gọi là Scope Chain.

Hay nói đơn giản hơn Scope Chain chính là chuỗi nối của các Lexical Environment.

Nếu biến không được tìm thấy ở local memory của execution context thì nó sẽ tiến hành tìm kiểm ở các lexical environment cho đến hết chuỗi thì thôi.

Tổng kết

Lexical Environment được tạo cùng Execution Context

Lexical Environment = local memory + parent’s Lexical Environment

– Chain of Lexical Environment gọi là Scope Chain


Vậy còn scope thì sao ? Scope có liên quan đến lexical environment này không ?

Mời các bạn đón đọc bài tiếp theo về scope nhé!

Các bài viết khác về JavaScript nằm ở mục “JavaScript” nhé!


Nếu bạn nghĩ những nội dung này là hữu ích, bạn có thể khích lệ mình bằng cách:

– Mời mình ☕️ cafe qua Ko-fi hay Momo

– Theo dõi 👀 để nhận các bài viết mới trên: Careerly, fanpage, linkedin

– Comment góp ý để các bài mình viết tốt hơn nữa!🤘 Nhắn mình nhé 🤘

Hẹn gặp mọi người một ngày nào đó!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 158

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 113

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 249