(Contents below)

Sau khi du hành qua không biết bao nhiêu ngôn ngữ lập trình (Java, C++, Python, JavaScript...) cuối cùng mình đã chọn JavaScript.

Từ một dân không chuyên về công thông tin, mình bắt đầu dấn thân vào nghề này như là một thử thách lớn với bản thân. Thực sự mình không thích với những gì mình học trên trường đại học mình đang chọn bây giờ. Bắt đầu với Javascript cũng thực sự là khó khăn vì không biết bao nhiêu người đã khuyên mình nên chọn 1 ngôn ngữ bài bản, nền tảng để theo đuổi như Java, C/C++. Họ nói JavaScript rất "tà đạo", học dễ mất gốc :O nhưng hình như mình không có hứng thú với những ngôn ngữ ấy lắm thì phải.

Một lý do nữa là vì JavaScript bây giờ làm được gần như mọi thứ: lập trình web cả ở phía client-side với sever-side;  làm game với unity3d; hay ứng dụng di động với React Native, NativeScript... Nhận thấy tương lai cực kì sáng lạng của JavaScipt, học 1 ngôn ngữ mà làm được đủ trò nên mình càng có động lực hơn. 

Việc viết cũng là 1 kĩ năng quan trọng, giúp mình tự trau dồi bản thân, tự củng cố kiến thức rất tốt (Và còn có thể biết lỗi sai mình mắc phải nữa chứ). Hi vọng những người mới học lập trình như mình có thể theo dõi, có thể có được một nguồn tham khảo về những mặt hay ho của JavaScript. Cũng rất mong nhận được sự góp ý nhiệt tình của những bạn đọc có kinh nghiệm. Vì mình mới chỉ bước chân vào nghề nên khó có thể tránh được sai sót.

Vì series này mình chỉ đề cập đến những kiến thức nền tảng JavaScript và có cách tiếp cận hơi khác với các tài liệu các bạn đọc hay các nguồn khác (Mình học qua 1 khóa Javascript trên Udemy: Javascript Understanding the Weird Parts. Kiến thức mình viết lại chủ yếu theo ý hiểu của mình trong khóa học này. Các bạn có thể tham khảo thêm các tài liệu hay như JavaScript The Definitive Guide, 6th edition - O' Reilly hay JavaScript : The Good Parts - O' Reilly.

Note: Có một số từ tiếng anh mình không muốn dịch sang tiếng Việt vì mình nghĩ dịch sang tiếng Việt nghe sẽ rất kì hoặc không được đầy đủ nghĩa nên xin phép được chêm 1 vài từ tiếng anh ạ. (Mình xin được viết nghiêng).
Ok. Let's Get Started 
=))

CHÀO MỪNG CÁC BẠN ĐẾN VỚI #NHẬT KÍ HỌC JAVASCRIPT 

Syntax parsers, Execution contexts, Lexical environments.

Vì sao những thứ này là quan trọng? Mình thấy việc đi ngay vào học ngôn ngữ chưa thực sự là một cách hay để bạn đi sâu vào ngôn ngữ ấy. Để có những kiến thức nền tảng, những ý tưởng căn bản về JavaScript cho những người chưa từng được tiếp xúc với lập trình thì không thể bỏ qua những lý thuyết căn bản. Vì những vấn đề này sẽ được lặp đi lặp lại trong quá trình học và làm việc với Javascript, nên chúng ta cần hiểu rõ chúng hoạt động như thế nào.

Syntax parser

Syntax parser đơn giản có thể hiểu là một chương trình có thể đọc và hiểu được code của mình nếu như chương trình được viết ra đúng về mặt cú pháp.

Syntax parsers is the part of the compiler that really understands the syntax of the language

Những dòng code của bạn không phải ma thuật, có ai đó đã viết chương trình dịch chúng cho máy tính của bạn có thể hiểu. Cụ thể hơn thì ở đây là bộ biên dịch sẽ đọc từng dòng code của bạn (character by character), nếu the syntax is valid chúng sẽ được thực thi theo cách mà máy tính có thể hiểu 

Ví dụ với đoạn code sau: 

Khi bạn chạy những dòng code này sẽ có 1 chương trình covert những gì bạn viết thành những chỉ lệnh (computer instructions : kết quả của quá trình thông dịch thành ngôn ngữ máy). Các hàm và biến sẽ được miêu tả lại chính xác trên bộ nhớ thành ngôn ngữ máy mà các thiết bị phần cứng có thể hiểu được.

Hãy nhớ: Mỗi khi chạy những dòng code của bạn, luôn có những chương trình đang âm thầm trợ giúp cho bạn tương tác với computer dễ dàng hơn!

Lexical Environment

Theo như mình hiểu đơn giản: lexical là những gì thuộc về từ vựng. Lexical environment (môi trường từ vựng?) là nơi mà hiện hữu những chứa đựng cụ thể, những thứ tồn tại physically  trong những dòng code mà bạn viết.

Vẫn với ví dụ ở trên chúng ta thêm 1 biến a chẳng hạn:

Như vậy ta có thể thấy biến a tồn tại laxically/physically  bên trong function greet(). 

Chúng ta đã biết chương trình được viết ra không được chuyển trực tiếp mà được thông dịch thành ngôn ngữ máy tính có thể hiểu được. Vì vậy laxical environment là khá quan trọng trong việc khi chúng ta nhìn thấy những gì được viết ra; chúng sẽ đưa ra một cái nhìn chính xác về những gì chúng thực sự được đặt trong bộ nhớ máy tính (memory)  hay những gì chúng trực tiếp ảnh hưởng đến nhau (interacted) (giữa các biến, các hàm trong chương trình...). Dựa vào lexical environment syntax parsers sẽ ra quyết định xem chương trình sẽ được thực hiện như thế nào trên phần cứng máy tính.

Execution context

Phần này mình không biết diễn tả sang tiếng Việt như thế nào vì khi mình viết ra theo ý hiểu của mình nó thực sự rất ngang :/ Nhưng hi vọng ở những bài viết sau khi mình đi sâu và nhắc nhiều đến nó các bạn sẽ thực sự hiểu nó là gì. Chỉ còn 1 điều cần lưu ý là: NÓ RẤT QUAN TRỌNG!!!

Có thể hiểu đơn giản execution context là 1 miền xác định được tạo ra giúp quản lý các phần code đang được thực thi.

Ví dụ như khi đoạn code này được thực thi 

nó sẽ tạo 1 execution context ngay bên trong hàm greet() giúp quản lý hết phần code được đặt bên trong hàm 

Bạn thắc mắc những cái trên đây là cái khỉ gì vậy? Nhưng tin mình đi. Nó thực sự rất quan trọng! Bạn sẽ thấy ngay sau khi bắt đầu viết những chương trình JavaScript đầu tiên của mình! !<==

Trên đây là những điều cơ bản tổng quan nhất khi mình bắt đầu học về JavaScript như 1 ngôn ngữ đầu tiên của mình. Một bài viết ngắn chỉ mang tính bắt đầu. Và cũng vì đây là lần đầu tiên mình viết 1 bài viết về chia sẻ kiến thức, một dạng nhật kí viết lại những gì đã học được nên khó có thể tránh được sai sót, văn cảnh còn lủng củng. Mong các bạn đọc có thể góp ý giúp mình để mình có thể có thêm những động lực để tiếp tục viết những bài viết chất lượng hơn.
Xin cám ơn :D


CONTENTS:

I. Execution contexts & Lexical Environments:

1. Syntax parsers, Execution contexts, Lexical environments

2. Objects, The global environment, The Creation Phase and Hoisting

===========================================================

NEXT->