replaceで関数を使う?

昨日に続き、またまた知らない人のブログを見て覚えた事。
下記の例では、2桁以上の数字を2倍にするのに
replaceで正規表現を使い、置換後の値を求めるのに関数が使えるとな。

var aa = "a33, b22, c222d, a1aa11a";
var bb = aa.replace(/\d{2,}/g, function(nn) {return nn * 2;});
alert(bb);  //"a66, b44, c444d, a1aa22a"と表示

function("$1")で行けそうな気がしたが、それではだめらしく
適当な変数名だとOKだった。
理屈は全くわからんけど、とりあえず覚えた。