Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu về ngăn xếp cuộc gọi JavaScript là cơ chế để theo dõi các cuộc gọi chức năng.: in this tutorial, you will learn about the JavaScript Call Stack which is a mechanism to keep track of the function calls.

Giới thiệu về ngăn xếp cuộc gọi JavaScript

Một ngăn xếp cuộc gọi là một cách để công cụ Java theo dõi vị trí của nó trong mã gọi nhiều chức năng. Nó có thông tin về chức năng nào hiện đang được chạy và các chức năng nào được gọi từ bên trong chức năng đó

Ngoài ra, công cụ JavaScript sử dụng ngăn xếp cuộc gọi để quản lý bối cảnh thực thi:call stack to manage execution contexts:

  • Bối cảnh thực thi toàn cầu
  • bối cảnh thực thi chức năng

Call Stack hoạt động dựa trên nguyên tắc LIFO, tức là, lần đầu tiên trước.

Khi bạn thực thi một tập lệnh, công cụ JavaScript sẽ tạo bối cảnh thực thi toàn cầu và đẩy nó lên đầu ngăn xếp cuộc gọi.

Bất cứ khi nào một hàm được gọi, công cụ JavaScript sẽ tạo bối cảnh thực thi chức năng cho hàm, đẩy nó lên đầu ngăn xếp cuộc gọi và bắt đầu thực thi chức năng.

Nếu một hàm gọi một hàm khác, công cụ JavaScript sẽ tạo bối cảnh thực thi chức năng mới cho hàm đang được gọi và đẩy nó lên đầu ngăn xếp cuộc gọi.

Khi chức năng hiện tại hoàn thành, động cơ JavaScript bật nó ra khỏi ngăn xếp cuộc gọi và tiếp tục thực hiện khi nó rời đi.

Kịch bản sẽ dừng khi ngăn xếp cuộc gọi trống.

Hãy bắt đầu với ví dụ sau:

function add(a, b) { return a + b; } function average(a, b) { return add(a, b) / 2; } let x = average(10, 20);

Code language: JavaScript (javascript)

Khi công cụ JavaScript thực thi tập lệnh này, nó đặt bối cảnh thực thi toàn cầu (được biểu thị bằng hàm main() hoặc global() trên ngăn xếp cuộc gọi.

Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Bối cảnh thực thi toàn cầu bước vào giai đoạn sáng tạo và chuyển sang giai đoạn thực thi.

Công cụ JavaScript thực hiện cuộc gọi đến hàm average(10, 20) và tạo bối cảnh thực thi chức năng cho hàm average() và đẩy nó lên đầu ngăn xếp cuộc gọi:

Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Công cụ JavaScript bắt đầu thực thi average() vì chức năng average() nằm trên đỉnh của ngăn xếp cuộc gọi.

Hàm average() gọi hàm add(). Tại thời điểm này, công cụ JavaScript tạo ra một bối cảnh thực thi chức năng khác cho hàm add() và đặt nó lên đỉnh của ngăn xếp cuộc gọi:

Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Công cụ JavaScript thực thi chức năng add() và bật nó ra khỏi ngăn xếp cuộc gọi:

Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Tại thời điểm này, chức năng average() nằm trên đỉnh của ngăn xếp cuộc gọi, công cụ JavaScript thực thi và bật nó ra khỏi ngăn xếp cuộc gọi.

Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Bây giờ, ngăn xếp cuộc gọi trống nên tập lệnh dừng thực thi:

Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Hình ảnh sau đây minh họa trạng thái tổng thể của ngăn xếp cuộc gọi trong tất cả các bước:

Hướng dẫn what is javascript call stack? - ngăn xếp cuộc gọi javascript là gì?

Stack Overflow

Ngăn xếp cuộc gọi có kích thước cố định, tùy thuộc vào việc triển khai môi trường máy chủ, trình duyệt web hoặc node.js.

Nếu số lượng bối cảnh thực thi vượt quá kích thước của ngăn xếp, sẽ xảy ra lỗi tràn ngăn xếp.

Ví dụ: khi bạn thực thi chức năng đệ quy không có điều kiện thoát, công cụ JavaScript sẽ đưa ra lỗi tràn ngăn xếp:

function fn() { fn(); } fn(); // stack overflow

Code language: JavaScript (javascript)

JavaScript không đồng bộ

JavaScript là ngôn ngữ lập trình đơn luồng. Điều này có nghĩa là động cơ JavaScript chỉ có một ngăn xếp cuộc gọi. Do đó, nó chỉ có thể làm một điều tại một thời điểm.

Khi thực thi tập lệnh, công cụ JavaScript thực hiện mã từ trên xuống dưới, từng dòng. Nói cách khác, nó đồng bộ.

Không đồng bộ có nghĩa là công cụ JavaScript có thể thực hiện các tác vụ khác trong khi chờ hoàn thành một nhiệm vụ khác. Ví dụ: động cơ JavaScript có thể:

  • Yêu cầu dữ liệu từ một máy chủ từ xa.
  • Hiển thị một spinner
  • Khi dữ liệu có sẵn, hãy hiển thị nó trên trang web.

Để làm điều này, động cơ JavaScript sử dụng một vòng lặp sự kiện, sẽ được đề cập trong hướng dẫn tiếp theo.

Bản tóm tắt

  • JavaScript Engine sử dụng ngăn xếp cuộc gọi để quản lý bối cảnh thực thi.
  • Call Stack sử dụng cấu trúc dữ liệu ngăn xếp hoạt động dựa trên nguyên tắc LIFO (lần đầu tiên trước).

Hướng dẫn này có hữu ích không?

Ngăn xếp JavaScript là gì?

Trong bài viết này, chúng tôi sẽ triển khai cấu trúc dữ liệu ngăn xếp trong JavaScript. Stack là một cấu trúc dữ liệu rất hữu ích và có một loạt các ứng dụng. Ngăn xếp là một cấu trúc dữ liệu tuyến tính trong đó bổ sung hoặc loại bỏ phần tử theo một thứ tự cụ thể, tức là LIFO (lần cuối cùng ra khỏi đầu tiên) và Filo (đầu tiên trong lần cuối cùng).a linear data structure in which addition or removal of element follows a particular order i.e. LIFO(Last in First Out) AND FILO(First in Last Out).

Chính xác thì Callstack hoạt động như thế nào?

Sự mô tả.Vì ngăn xếp cuộc gọi được tổ chức dưới dạng ngăn xếp, người gọi đẩy địa chỉ trả lại vào ngăn xếp và chương trình con được gọi là khi nó hoàn thành, kéo hoặc bật địa chỉ trả lại khỏi ngăn xếp cuộc gọi và chuyển điều khiển sang địa chỉ đó.the caller pushes the return address onto the stack, and the called subroutine, when it finishes, pulls or pops the return address off the call stack and transfers control to that address.

Mã JavaScript được thực thi & Call Stack như thế nào?

Khi bạn thực thi một tập lệnh, công cụ JavaScript sẽ tạo bối cảnh thực thi toàn cầu và đẩy nó lên đầu ngăn xếp cuộc gọi.Bất cứ khi nào một hàm được gọi, công cụ JavaScript sẽ tạo bối cảnh thực thi chức năng cho hàm, đẩy nó lên đầu ngăn xếp cuộc gọi và bắt đầu thực thi chức năng.. Whenever a function is called, the JavaScript engine creates a function execution context for the function, pushes it on top of the call stack, and starts executing the function.

Call Stack trong vòng lặp sự kiện là gì?

Chúng ta hãy xem những gì xảy ra ở phía sau.Call Stack chịu trách nhiệm theo dõi tất cả các hoạt động phù hợp sẽ được thực thi.Bất cứ khi nào một chức năng kết thúc, nó được bật từ ngăn xếp.Hàng đợi sự kiện chịu trách nhiệm gửi các chức năng mới đến ngăn xếp để xử lý.responsible for keeping track of all the operations in line to be executed. Whenever a function is finished, it is popped from the stack. The event queue is responsible for sending new functions to the stack for processing.