Três maneiras diferentes de usar funções javascript, mas não conheço os prós e os contras. Alguém poderia explicar as diferenças?

Eu tenho três maneiras de fazer uma função e devolvê-la. (Talvez exista mais?), Mas não sei a diferença entre eles e quando usar qual. Alguém poderia explicar.

var test1 = function() {
    var funk1 = function() {
        console.log(1);
    }
    var funk2 = function(msg) {
        console.log(msg);
    }
    return {
        funk1: funk1,
        funk2: funk2
    }
};

var test2 = function() {
    this.funk1 = function() {
        console.log(1);
    }
    this.funk2 = function(msg) {
        console.log(msg);
    }
};

var someThing = test1();
someThing.funk1();
someThing.funk2(2);

var someThing = new test1();
someThing.funk1();
someThing.funk2(2);

var thingElse = new test2();
thingElse.funk1();
thingElse.funk2(2);