Mar 30, 2020
Javascript closure primer example
functionsay667 (){
varnum = 666 ;
varsayAlert =function (){ alert (num);}
num ++ ;
returnsayAlert;
}
varsayAlert = say667 ();
sayAlert ();
functionsetUpSomeGlobals (){
varnum = 666 ;
gAlertNumber =function (){ alert (num);}
gIncreaseNumber =function (){num ++ ;}
gSetNumber =function ( x ){num = x;}
}
setUpSomeGlobals (); //Assign values to three global variables
gAlertNumber (); //666
gIncreaseNumber ();
gAlertNumber (); //667
gSetNumber ( 12 );
gAlertNumber (); //12
functionbuildList (list){
varresult = [];
for (vari = 0 ;i < list. length ;i ++ ){
variteml = 'item' + list[i];
result. push ( function (){ alert (item + '' + list[i]);});
}
returnresult;
}
functiontestList (){
varfnlist = buildList ([ 1 , 2 , 3 ]);
for (varj = 0 ;j < fnlist. length ;j ++ ){
fnlist[j]();
}
}
functionsayAlice (){
varsayAlert =function (){ alert (alice);}
varalice = 'HelloAlice' ;
returnsayAlert;
}
varhelloAlice = sayAlice ();
helloAlice (); //HelloAlice
functionnewClosure (someNum,someRef){
varnum = someNum;
varanArray = [ 1 , 2 , 3 ];
varref = someRef;
returnfunction (x){
num += x;
anArray. push (num);
alert ( 'num:' + num + 'nanArray' + anArray. toString () + 'nref.someVar' + ref.someVar);
}
}
closure1 = newClosure ( 40 ,{someVar: 'closure1' });
closure2 = newClosure ( 1000 ,{someVar: 'closure2' });
closure1 ( 5 );
closure2 ( - 10 );