Hàm, Tiến trình và Thực thi trong JavaScript
Thành thạo JavaScript đòi hỏi bạn phải hiểu cách mã nguồn vận hành.
Dưới đây là những khái niệm cốt lõi mà bạn cần biết.
𝟭. 𝟱 𝗧𝘆𝗽𝗲 𝗵𝗮̀𝗺 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁
- Named Function (Hàm có tên): Sử dụng một cái tên cụ thể. Điều này giúp bạn gỡ lỗi (debug) nhanh chóng.
- Anonymous Function (Hàm ẩn danh): Không có tên. Bạn sử dụng chúng cho các hàm callback hoặc gán vào biến.
- Function Expression (Biểu thức hàm): Bạn gán một hàm cho một biến.
- Arrow Function (Hàm mũi tên): Một cú pháp ngắn gọn sử dụng ký hiệu
=>. Nó xử lý từ khóathistheo cách khác. - IIFE: Chạy ngay khi bạn định nghĩa nó. Nó giúp giữ cho mã của bạn được cô lập.
𝟮. 𝗣𝗿𝗼𝗰𝗲𝘀𝘀 𝘃𝘀. 𝗧𝗵𝗿𝗲𝗮𝗱
Một Tiến trình (Process) là một chương trình đang chạy. Mỗi tiến trình có bộ nhớ riêng. Nếu Chrome bị lỗi, Spotify vẫn tiếp tục chạy vì chúng là các tiến trình riêng biệt.
Một Luồng (Thread) là một đơn vị nhỏ bên trong một tiến trình. Các luồng chia sẻ cùng một bộ nhớ. Điều này giúp chúng nhanh hơn và nhẹ hơn so với các tiến trình.
𝟯. 𝗦𝘆𝗻𝗰𝗵𝗿𝗼𝗻𝗼𝘂𝘀 𝘃𝘀. 𝗔𝘀𝘆𝗻𝗰𝗵𝗿𝗼𝗻𝗼𝘂𝘀
JavaScript là đơn luồng (single-threaded). Nó thường chỉ chạy một tác vụ tại một thời điểm.
Thực thi Đồng bộ (Synchronous Execution): Các tác vụ chạy theo một thứ tự nghiêm ngặt. Dòng tiếp theo phải chờ dòng hiện tại hoàn thành. Điều này có thể làm chậm ứng dụng của bạn nếu một tác vụ mất quá nhiều thời gian.
Thực thi Bất đồng bộ (Asynchronous Execution): Các tác vụ có thể bắt đầu ngay bây giờ và hoàn thành sau đó. Điều này ngăn mã của bạn bị chặn (blocking).
Cách thức hoạt động:
- Call Stack xử lý các tác vụ hiện tại của bạn.
- Web APIs xử lý các tác vụ dài như bộ hẹn giờ (timers) hoặc yêu cầu dữ liệu ở chế độ nền.
- Callback Queue giữ các tác vụ đã hoàn thành.
- Event Loop chuyển các tác vụ từ hàng đợi (queue) trở lại ngăn xếp (stack) khi ngăn xếp trống.
Ví dụ về luồng Bất đồng bộ:
- Log "Hi"
- Bắt đầu bộ hẹn giờ trong 2 giây
- Log "End"
- (2 giây trôi qua) Log "Vicky"
Mã không chờ bộ hẹn giờ. Nó chuyển ngay sang "End".
Optional learning community: https://t.me/GyaanSetuAi