tôi đã rảnh rang xung quanh với JavaScript, và thông báo một hành vi kỳ lạ (lạ đối với tôi ít nhất...)Javascript quản lý các cuộc gọi đệ quy như thế nào?
Vì vậy, tôi đã làm một SSCCE đây nó đi:
Tôi đã một div có tên là "myDiv"
function changeText(text){
document.getElementById("myDiv").innerHTML=text;
}
function recursiveCall(counter){
if(counter){
setTimeout(function(){
recursiveCall(--counter);
changeText(counter);
},750);
}
}
recursiveCall(10);
Sống dụ: http://jsfiddle.net/T645X/
Vì vậy, tôi thay đổi các văn bản trên div, và những gì xảy ra là các văn bản đi 9-0, trong khi tôi nghĩ rằng nó đã được giả để đi từ 0 đến 9, kể từ cuộc gọi đệ quy changeText(counter);
trước khi gọi phương thức thực sự thay đổi văn bản.
+1 - Tôi đồng ý với điều này. Một ví dụ đơn giản mô tả điều này xảy ra từ 0-9 sẽ liên quan đến việc loại bỏ bản chất không đồng bộ của đệ quy. [demo] (http://jsfiddle.net/F9Nac/). Nó kết thúc rõ ràng ở mức 9, 0-8 có thể khó thấy khi chúng xảy ra ở cấp độ nano giây. –
Bạn nói đúng, tôi đã làm bài kiểm tra tiếp theo để chứng minh điều đó: http://jsfiddle.net/AVyng/ (Tôi cần đợi 7 phút để chấp nhận câu trả lời này) – jsedano
@anakata Tôi muốn bạn biết rằng lý do bạn có một câu trả lời quá nhanh (và một upvote) là bởi vì bạn đã diễn đạt câu hỏi của bạn rất tốt và nó chứa một ví dụ tái sản xuất đơn giản. Đạo cụ đọc sách hướng dẫn và vui mừng tôi có thể giúp :) –