JS - Closures Lab - SOLUTION

by Ryan Morris

JavaScript

/**
 * Month names function
 *
 * Using a closure, write a function that will 
 * return the Month name for a given number (1-12). 
 * 
 * Hint: Your function will include an array of month names
 * Hint: It will return a function 
 *
 */

var monthName = (function(){
        
    var month_names = ["January", "February", "March"]; // lazy...
    
    return function (n) {
     
        return month_names[n-1];
        
    }

})();

console.log(monthName(1)); // -> January


/**
 * Bonus:
 * 
 * Set a timer to run your function 12 times, once each second
 * It should use the increment of a loop to log the month name
 * that maps to the integer value
 *
 * Example output, one line per second:
 * "January"
 * "February"
 * "March"
 * ...
 *
 * Hint: You'll use setTimeout(function, i*1000);
 * Hint: You'll need an additional scope to pass "i" correctly 
 * in to the timer function
 */

for (var i=1; i<=12; i++) {
 
    (function(j) {
        setTimeout(function() {
            
            console.log(monthName(j));
            
        }, i*1000);
        
    })(i);
    
}