Tres formas diferentes de usar las funciones de JavaScript, pero no conozco los pros y los contras. ¿Alguien podría explicar las diferencias?

Tengo tres formas de hacer una función y devolverla. (¿Tal vez hay más?) Pero no sé la diferencia entre ellos y cuándo usar cuál. ¿Podría alguien explicarme?

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);