2011-08-25 39 views
18

Ai đó có thể giải thích chính xác những gì là Eteration và hiển thị ví dụ?Thay đổi - giải thích và ví dụ

nguồn: Long running tasks YUI blog của Douglas Crockford

+0

Tôi đã chỉnh sửa câu trả lời của mình với thông tin có liên quan hơn, giải thích chính xác ** eteration ** là gì và cách nó được sử dụng trong ngữ cảnh của Javascript. – luvieere

+0

Tôi đã thêm một mẫu mã, với giải thích có liên quan. – luvieere

Trả lời

32

Ban đầu, tôi nghĩ đó chỉ là một lỗi đánh máy của lặp, như tìm kiếm trực tuyến với eteration mà không đạt kết quả đáng kể.

Nhưng, sau đó, tôi đã xem qua số references tuyên bố rằng thuật ngữ này được đặt ra bởi chính Crockford, trong một trong các cuộc trò chuyện của anh ấy.
Online, nơi duy nhất tôi có thể tìm một lời giải thích là trên trang của mình, trong The Factorial Tutorial, một bài báo ở đâu, trong Act 2, như một bình luận cho một mẫu mã, ông nói:

Luật 2a : thông điệp lặp (eteration)

điều này dường như là một phần của một cặp liên quan từ ngữ, như mẫu mã tiếp theo của mình, mà thực hiện đệ quy mà không sử dụng một chồng, có chứa các thành viên khác của cặp:

Luật 2b: Thông điệp đệ quy (ecursion)

Vì vậy, có vẻ như eterationecursion được về phát minh và được xác định bởi Crockford mình để chỉ lặp đi lặp lại thông điệp và đệ quy trong bối cảnh của E Programming Language, được thiết kế dựa trên Java dành cho các nhà phát triển, những người viết các ứng dụng được phân phối.

Thực tế là ngôn ngữ được gọi là E có lẽ là lý do để cung cấp cho các tính năng lặp lại và đệ quy cụ thể của thuật ngữ đã chọn (** e *** teration * và ** e *** cursion *).

Nếu bối cảnh Javascript, Crockford giải thích thuật ngữ eteration như một phần của cuộc nói chuyện Crockford on JavaScript -- Scene 6: Loopage, bắt đầu từ phút 30:40:

Eteration nghĩa để phá vỡ một nhiệm vụ thành nhiều lượt để trên mỗi , thay vì đi qua một vòng lặp thông thường, ở dưới cùng của vòng lặp, chúng tôi gọi setTimeOut, chuyển cho nó một chức năng gây ra chúng tôi để thực hiện việc tiếp theo. Điều đó có nghĩa là lượt rẽ sẽ là ngắn - lần lượt chỉ miễn là một lần khắc phục - và chúng ta có thể làm nhiều eterations như chúng ta muốn và không khóa vòng lặp sự kiện.

Kết quả là, thay vì một vòng lặp chặt chẽ, ngăn chặn các giao diện nếu phải mất quá lâu, eteration lịch trình từng bước của vòng lặp, trong một chuỗi mà chỉ có khối giao diện trong khi thực thi bước thực tế , không phải giữa các bước. Điều này làm cho nó có thể thực hiện các tác vụ chạy dài trong cùng một luồng với giao diện (Javascript là đơn luồng), trong khi vẫn duy trì khả năng đáp ứng ứng dụng.

Kiểm tra cuộc trò chuyện đầy đủ với chất lượng tốt hơn nhiều và kèm theo bản sao toàn văn here.

Ngoài ra, đối với một tài liệu tham khảo về cách một kỹ thuật như vậy có thể được thực hiện, xem xét các tình huống sau:

<html> 
<head> 
    <script type="text/javascript"> 
    function testFeedback() 
    { 
     var feedbackDiv = document.getElementById("feedbackDiv"); 

     feedbackDiv.innerHTML += "The Interface is Still Responsive!</br>"; 
    } 

    var currentNumber = 0; 
    var loopStepDelay = 30; 

    function performLoopStep() 
    { 
    var numbersDiv = document.getElementById("numbersDiv"); 
    numbersDiv.innerHTML = currentNumber++; 
    setTimeout("performLoopStep()", loopStepDelay); 
    } 
    setTimeout("performLoopStep()", loopStepDelay); 
    </script> 
</head> 
<body> 
    <div id="numbersDiv"></div> 
    </br> 
    </br> 
    <div id="feedbackDiv"></div> 
    </br> 
    </br> 
    <button onClick="testFeedback()">Try Me</button> 
<body> 
</html> 

Có hai div s, một hiển thị các chỉ số của eteration đang diễn ra, người kia phụ thêm văn bản Giao diện vẫn còn đáp ứng! trên mỗi nút Thử tôi. Như bạn có thể thấy từ mã, các bước eteration được lên lịch bởi setTimeout cách nhau một khoảng thời gian, cho phép tương tác của người dùng diễn ra và cũng được xử lý. Do đó, các bước eteration sẽ tiếp tục chạy khi người dùng nhấp vào nút và kích hoạt cập nhật div thứ hai, duy trì sự đáp ứng của trang trong khi thực hiện tiến độ thực sự với công việc cần thực hiện (trong trường hợp này, chỉ cần hiển thị các chỉ mục).

+0

Có thể, nhưng thuật ngữ này được sử dụng trong ngữ cảnh của JavaScript và Nodej. Không có E hoặc Java. – Bakudan

Các vấn đề liên quan