function abc(){
// Code comes here.
}
Will be hoisted.
abc = function (){
// Code comes here.
}
Will not be hoisted.
For instance if you did:
abc();
function abc() { }
The code will run as abc
is hoisted to the top of the enclosing scope.
If you however did:
abc();
var abc = function() { }
abc
is declared but has no value and therefore cannot be used.
As to which is better is more of a debate of programming style.
http://www.sitepoint.com/back-to-basics-javascript-hoisting/