おまけ

上の方法だと,yukobaさんのコメントで貼られてたClean入門の「不要な評価をしない」であった,正格言語では処理が止まらない

f a = f (a + 1)
g a b = a

Start = g (1 + 1) (f 1)

に対しても

var f = function(a){
    return function(){
        return f(a+1).force();
    }
}

var g = function(a, b){
    return function(){
        return a.force();
    }
}

alert(g(1+1,f(1)).force());

では,処理が止まって,2が返ってきます.
これでいいの?