Học Javascript 1: Syntax Parser, Execution Context, Lexical Environment là gì
Bài viết giải thích các khái niệm nền tảng trong JavaScript như Syntax Parser, Execution Context và Lexical Environment. Tác giả phân tích tầm quan trọng của việc hiểu những thuật ngữ này để nắm vững cách JavaScript hoạt động, đồng thời cung cấp ví dụ minh họa về cách trình duyệt xử lý mã nguồn.

Tại sao cần biết những thuật ngữ này
Thực sự, bạn không cần biết những khái niệm như Syntax Parser , Execution Context , Lexical Environment là gì vẫn được. Tuy nhiên, nếu bạn muốn hiểu rõ chính xác điều gì đang diễn ra khi code bạn chạy ( đương nhiên vẫn dễ hiểu hơn mã máy nha ) thì bạn cần phải giải thích được những thuật ngữ khô khan này.
Ngoài ra, những thuật ngữ nền tảng này sẽ theo bạn xuyên suốt quá trình học và làm việc với Javascript sau này. Để hiểu những khái niệm khác như: hoisting trong Javascript (Creation Phase vs. Execution Phase ), từ khóa this, array functions thì bạn nên hiểu Syntax Parser , Execution Context , Lexical Environment là gì trước.
Syntax Parser là gì?
Ngôn ngữ lập trình cũng có nhiều loại. Mình sẽ không phân loại ở bài viết này. Nhưng bạn sẽ thường thấy cụm từ "ngôn ngữ lập trình cấp cao" high level programming language. Javascipt là một trong số đó, vì thế cú pháp ( syntax ) của nó khá giống ngôn ngữ tự nhiên.
Ví dụ muốn viết một hàm thì:
function greet(){
var a = "hello world";
}
Thực chất Synax Parser cũng chỉ là một chương trình được các lập trình viên khác viết ra mà thôi. Syntax Parser trong Javascript sẽ dịch đoạn code này sang mã máy vì mã máy quá phức tạp và khó, không phải ai cũng học được.
Syntax Parser là gì
Lexical Environment là gì?
Lexical Environment là nơi chúng ta viết code của mình ( đặt biến, hằng, hàm ở đâu? ) Và điều này rất quan trọng.
Như đã nói ở Syntax Parser, code ta viết sẽ được dịch sang mã máy, vì thế nhìn code là có thể biết được biến, hàm chúng được tạo như thế nào trong bộ nhớ máy tính, chúng tương tác với nhay như thế nào.
Để hiểu rõ hơn, mình lấy ví dụ đoạn code sau:
function greet(){
var a = "hello world";
}
Lexical Environment tức là bạn đặt biến a trong hàm greet(). ( Đã trả lời cho cây hỏi: Nơi đặt biến a? )
Một số trang sẽ nói là Lexical Environment là Scope hay Lexical Scope. Các anh hùng vẫn tranh cãi về vấn đề này trên StackOverFlow.
Còn đây là định nghĩa gốc chính chủ:
Lexical Environment is the place where “the association of Identifiers to specific variables and functions based upon the lexical nesting structure of ECMAScript code” is stored.
Từ định nghĩa này, bạn sẽ thấy một loạt từ chuyên môn ( Jargon ) khác như:
-
association of Identifiers
-
lexical structure
Rồi từ 2 cái này lại đẻ ra:
-
environment record
-
reference to the outer environment
-
Declarative environment record
-
Object environment record
Dễ hiểu nhất thì Lexical Environment sẽ trả lời câu hỏi "Đoạn code này đặt ở đâu?". Bạn muốn đào sâu hơn cứ đọc thêm ở đây nhé.
Execution Context là gì?
Một lần nữa mình xin nhắn lại code ta viết sẽ được dịch sang mã máy. Vì thế trong quá trình dịch này sẽ có nhiều thứ xảy ra, một trong số đó là Execution Context.
Mình lấy ví dụ đoạn code sau:
function greet(){
var a = "hello world";
function shakeHands(){
var count = 5;
}
}
Thì Execution Context sẽ quyết định tạo biến a trước hay biến count trước. Rồi chương trình sẽ chạy greet() trước hay shakeHands() trước.
Sẽ có một loạt thuật ngữ chúng ta cần hiểu liên quan đến Execution Context như:
-
Global code
-
Function code
-
Eval Code
-
Execution Context Stack
-
Creation Stage
-
Code Execution Stage
Và bạn yên tâm, mình sẽ viết riêng một bài đầy đủ về chủ đề này sau nhé.
Kết luận
Có thể bạn nghĩ tại sao phải hiểu mấy cái khỉ này làm gì, có ích gì cho đời đâu. Nhưng hãy tin mình đi, đây là nền tảng để bạn có thể hiểu rõ Javascript trong tương lại. Bài này chỉ mục đích giới thiệu, ở những bài sau, chúng ta sẽ tìm hiểu chi tiết hơn. Còn rất nhiều cái quái đản trong Javascript đang chờ đón bạn!
Related Posts
Discover more content you might enjoy

English Course Challenge in 2 weeks - Day 12: Kinh nghiệm quay khoá học
Bài viết chia sẻ kinh nghiệm quay khóa học tiếng Anh về Bubble.io, bao gồm việc lựa chọn phần mềm Screen.Studio để quay màn hình và tự động tạo phụ đề, những bài học từ việc đặt mục tiêu và xác định đối tượng học viên trước khi chọn nội dung, cũng như lợi ích của việc thử thách bản thân để vượt qua nỗi sợ và hoàn thành dự định. Tác giả cũng giới thiệu khóa học 'Build your first web app in Bubble for beginners' dành cho người mới bắt đầu.

English Course Challenge in 2 weeks - Day 7: Fine-tuning ChatGPT là gì?
Bài viết chia sẻ tiến trình ngày thứ 7 trong thử thách tạo khóa học tiếng Anh trong 2 tuần. Tác giả giới thiệu về Fine-tuning ChatGPT, một tính năng cho phép tạo phiên bản ChatGPT tùy chỉnh dựa trên dữ liệu cung cấp, đặc biệt hữu ích cho chatbot hỗ trợ khách hàng. Bài viết cũng thảo luận về việc điều chỉnh hướng phát triển ứng dụng demo và khóa học, cùng với những khó khăn khi sử dụng API của OpenAI tại Việt Nam.

English Course Challenge in 2 weeks - Day 2: Tiềm năng của Prompt Engineering
Bài viết chia sẻ về việc phát triển ứng dụng SaaS AI demo cho khóa học Bubble, tập trung vào Prompt Engineering - kỹ thuật viết prompt hiệu quả cho AI. Tác giả giới thiệu cấu trúc prompt chuẩn gồm 6 phần: Persona, Context, Task, Format, Examplar và Tone, đồng thời trình bày ý tưởng và mockup cho ứng dụng hỗ trợ người dùng viết prompt tốt hơn, giải quyết vấn đề nhiều người gặp phải khi sử dụng AI.

Đối thoại với AI: Generative AI (AI tạo sinh) và những điều cần biết
Bài viết dạng hỏi đáp toàn diện về AI tạo sinh, bao gồm kỹ thuật viết prompt hiệu quả, cách kiếm tiền từ AI, các nền tảng thay thế Claude AI, chi phí huấn luyện mô hình lớn, và các khái niệm quan trọng như BERT, mô hình tiền huấn luyện cùng những vấn đề đạo đức liên quan.

#5 - NoCode MVP - Buông bỏ để hạnh phúc
Chia sẻ về việc đối mặt với trễ deadline trong dự án NoCode MVP và quyết định buông bỏ một số tính năng để tập trung vào những điều quan trọng nhất.
