setTimeout/setInterval に関数オブジェクトを渡す

なんとなく個人的に扱いにくさを覚えるのが

  setInterval('functionName', timeout);

とする時に関数名を渡す事。関数そのものを渡したいんじゃ!って気持ちが一杯なんで、

え?普通にできるんじゃね?良くやっているけど。

function main() {
    var n = 10;
    var foo = function() {
        alert(n);
    }

    setTimeout(foo, 2000); // or setInterval(foo, 2000);
}
main();

IE7, Firefox 2.0, Opera 9.01 のそれぞれでちゃんと動くけどなぁ。何か勘違いしている?
あと、処理キューに入れるんなら setTimeout のほうじゃないかと思ったり。いや良くわかんないけど。