Chapter 2 - closures 2

by Denise Nepraunig

HTML

<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.14.0.css">
<script src="http://code.jquery.com/qunit/qunit-1.14.0.js"></script>
<div id="qunit"></div>
<div id="qunit-fixture"></div>

JavaScript

// Programming JavaScript Applications
// Chapter 2
// closures 2

(function () {
    var arr = [],
        count = 1,
        delay = 20,
        timer,
        complete;
    
    timer = function timer() {
        setTimeout(function inner() {
            arr.push(count);
            
            if (count < 3) {
                count += 1;
                timer();
            } else {
                complete();
            }
        }, delay);
    };
    
    QUnit.asyncTest("Closure with setTimeout.", function(assert) {
        complete = function complete() {
            QUnit.equal(arr.join(","), "1,2,3", "arr should be [1,2,3]");
            start();
        };
        
        timer();
        
        QUnit.equal(arr.length, 0, 
                    "arr should be empty until first timeout");
    });    
}());