TestClosure

by Joe LeMonnier

JavaScript

paper= Raphael(0,0,700,600);


function makeAdder(x) {    

// parameter `x` is an inner variable    
// inner function `add()` uses `x`, so it has a "closure" over it    

function add(y) {       
paper.text(100,250,"y equal  "+ y); 
return y + x;    
};    

return add;
}

// `plusOne` gets a reference to the inner `add(..)`
// function with closure over the `x` parameter of
// the outer `makeAdder(..)`

var plusOne = makeAdder( 1 );

//var plusTen = makeAdder( 10 );

paper.text(100,120,"plusTen(213)=    " + (makeAdder(10))(23));


 




var i = 0,
    j = 0;
var funcs = [];
for (i = 0; i < 10;i++) {              // let's create 3 functions
    funcs[i] = (function(i) {            // and store them in funcs
        paper.circle(10,20*i,10);
    })(i);
}
for (j = 0; j < 3; j++) {
    funcs[j]();    
paper.circle(120,20,"33333");   // and now let's run each one to see
}