2008年7月15日火曜日

javascriptでクロージャ

クロージャとか、無名関数とか、引数として関数を渡すとか、javascriptって色々できるな。
難しそうだからさわってなかったけど、その場だけでごりごり書くときに便利そう。


/* New document created: 6.2.2008 18:34:27 */

function map(fn, a)
{
for (i = 0; i < a.length; i++)
{
a[i] = fn(a[i]);
}
}

function reduce(fn, a, init)
{
var s = init;
for (i = 0; i < a.length; i++)
s = fn( s, a[i] );
return s;
}

function sum(a)
{
return reduce(function(x, y){ return x+y; }, a, 0);
}

function cntYear(x) //Closure
{
var i = 0;
return function()
{
i = i + 1;
return x + i;
}
}

var a = [1, 2, 3];
map( function(x){return x*2;}, a );
map( alert, a );

years = new Array(400);
map( cntYear(2008), years );
map( function(x){ if(x%400==0 || x%100!=0 && x%4==0){return 1;}else{return 0;} }, years);
alert(sum(years));

0 件のコメント: