Hướng dẫn javascript set global variable in callback - javascript đặt biến toàn cục trong lệnh gọi lại
Một từ Trả lời: Sự không đồng bộ.asynchronicity. Show
Lời nói đầuChủ đề này đã được lặp lại ít nhất một vài ngàn lần, ở đây, trong Stack Overflow. Do đó, trước hết tôi muốn chỉ ra một số tài nguyên cực kỳ hữu ích:
Câu trả lời cho câu hỏi trong tayHãy theo dõi hành vi phổ biến trước tiên. Trong tất cả các ví dụ, Bây giờ câu hỏi là, khi nào cuộc gọi đó được gọi là? Nó phụ thuộc vào trường hợp. Hãy cố gắng theo dõi một số hành vi phổ biến một lần nữa:
Trong mọi trường hợp, chúng tôi có một cuộc gọi lại có thể chạy đôi khi trong tương lai. "Thỉnh thoảng trong tương lai" này là những gì chúng ta gọi là dòng chảy không đồng bộ.asynchronous flow. Thực thi không đồng bộ được đẩy ra khỏi dòng chảy đồng bộ. Đó là, mã không đồng bộ sẽ không bao giờ thực thi trong khi ngăn xếp mã đồng bộ đang thực thi. Đây là ý nghĩa của JavaScript là một luồng đơn.never execute while the synchronous code stack is executing. This is the meaning of JavaScript being single-threaded. Cụ thể hơn, khi động cơ JS không hoạt động - không thực hiện một chồng mã đồng bộ (a) - nó sẽ thăm dò ý kiến cho các sự kiện có thể đã kích hoạt các cuộc gọi không đồng bộ (ví dụ: thời gian chờ hết hạn, nhận được phản hồi mạng) và thực hiện chúng. Đây được coi là vòng lặp sự kiện. Đó là, mã không đồng bộ được tô sáng trong các hình dạng màu đỏ được vẽ bằng tay chỉ có thể thực thi sau khi tất cả các mã đồng bộ còn lại trong các khối mã tương ứng của chúng đã được thực thi: Nói tóm lại, các hàm gọi lại được tạo đồng bộ nhưng được thực hiện không đồng bộ. Bạn không thể dựa vào việc thực hiện một chức năng không đồng bộ cho đến khi bạn biết nó đã được thực hiện và làm thế nào để làm điều đó? Nó là đơn giản, thực sự. Logic phụ thuộc vào thực thi chức năng không đồng bộ nên được bắt đầu/được gọi từ bên trong hàm không đồng bộ này. Ví dụ, việc di chuyển các ____10 và 1 quá bên trong hàm gọi lại sẽ đưa ra kết quả dự kiến, bởi vì kết quả có sẵn tại thời điểm đó.Thực hiện logic gọi lại của riêng bạnThường thì bạn cần phải làm nhiều việc hơn với kết quả từ một hàm không đồng bộ hoặc làm những việc khác nhau với kết quả tùy thuộc vào nơi hàm không đồng bộ đã được gọi. Hãy giải quyết một ví dụ phức tạp hơn một chút:
Lưu ý: Tôi đang sử dụng 3, 4 and any other asynchronous flow.Ví dụ này rõ ràng phải chịu vấn đề tương tự như các ví dụ khác, nó không chờ đợi cho đến khi chức năng không đồng bộ thực thi. Hãy giải quyết nó khi thực hiện một hệ thống gọi lại của riêng chúng tôi. Trước hết, chúng ta thoát khỏi cái
Mã mã của ví dụ trên:
Thông thường trong các trường hợp sử dụng thực tế, API DOM và hầu hết các thư viện đã cung cấp chức năng gọi lại (triển khai 6 trong ví dụ chứng minh này). Bạn chỉ cần vượt qua chức năng gọi lại và hiểu rằng nó sẽ thực hiện khỏi luồng đồng bộ và tái cấu trúc mã của bạn để phù hợp với điều đó.Bạn cũng sẽ nhận thấy rằng do bản chất không đồng bộ, không thể 7 một giá trị từ một luồng không đồng bộ trở lại dòng đồng bộ trong đó cuộc gọi lại được xác định, vì các cuộc gọi lại không đồng bộ được thực thi lâu sau khi mã đồng bộ đã hoàn thành thực thi.Thay vì 7ing giá trị từ một cuộc gọi lại không đồng bộ, bạn sẽ phải sử dụng mẫu gọi lại hoặc ... lời hứa.
Hứa hẹnMặc dù có nhiều cách để giữ cho địa ngục gọi lại với Vanilla JS, những lời hứa đang ngày càng phổ biến và hiện đang được chuẩn hóa trong ES6 (xem Promise - MDN). Lời hứa (a.k.a. Futures) cung cấp một cách đọc tuyến tính hơn, và do đó dễ chịu, đọc mã không đồng bộ, nhưng giải thích toàn bộ chức năng của chúng nằm ngoài phạm vi của câu hỏi này. Thay vào đó, tôi sẽ để lại những tài nguyên tuyệt vời này cho những người quan tâm:
Đọc thêm tài liệu về sự không đồng bộ của JavaScript
Chức năng gọi lại có thể truy cập biến toàn cầu không?Điều này có nghĩa là cuộc gọi lại là một đóng cửa. Việc đóng có quyền truy cập vào phạm vi của hàm chứa, do đó hàm gọi lại có thể truy cập các biến của các hàm chứa và thậm chí các biến từ phạm vi toàn cầu.the callback function can access the containing functions' variables, and even the variables from the global scope.
Bạn có thể đặt các biến toàn cầu trong JavaScript không?Các biến toàn cầu toàn cầu có thể được truy cập từ bất cứ nơi nào trong chương trình JavaScript.Các biến được khai báo với VAR, LET và Const khá giống nhau khi được khai báo bên ngoài một khối.Global variables can be accessed from anywhere in a JavaScript program. Variables declared with var , let and const are quite similar when declared outside a block.
Làm thế nào để bạn truy cập biến bên trong chức năng gọi lại JavaScript?3 Phương pháp truy cập đúng điều này bên trong một cuộc gọi lại.. Sử dụng một hàm mũi tên.Các chức năng mũi tên JavaScript đã được giới thiệu trong Ecmascript 6. .... Tạo một biến khác để lưu trữ đối tượng này..... Liên kết rõ ràng điều này với một đối tượng .. Callback () trong javascript là gì?Một cuộc gọi lại JavaScript là một hàm sẽ được thực thi sau khi một chức năng khác hoàn thành thực thi.Một định nghĩa chính thức hơn sẽ là - bất kỳ hàm nào được truyền dưới dạng đối số cho một hàm khác để nó có thể được thực thi trong hàm khác được gọi là hàm gọi lại.a function which is to be executed after another function has finished execution. A more formal definition would be - Any function that is passed as an argument to another function so that it can be executed in that other function is called as a callback function. |