I have a JavaScript class Test that has a private function foo that looks like this:
function Test(){}
(function()
{
    var foo = function(){
        // do stuff
        console.log('private work');
    }
    this.publicStuff = function(){
        foo();
    }
}).apply(Test);
and one that looks like this
function Test(){}
(function()
{
    function foo(){
        // do stuff
        console.log('private work');
    }
    this.publicStuff = function(){
        foo();
    }
}).apply(Test);
they both work OK and do same stuff and can even coexist like this:
function Test(){}
(function()
{
    var foo = function(){
        // do stuff
        console.log('private work VAR');
    }
    function foo(){
        // do stuff
        console.log('private work FUNC');
    }
    this.publicStuff = function(){
        foo();
    }
}).apply(Test);
But when they are together, the var foo = function() gets executed and the other one not.
What is the difference between the two ways of defining these private functions, what is the best practice and what are the advantages/disadvantages of each aproach
