You shall not add a semicolon after a function declaration.
Because, after checking the Javascript grammar:
- StatementList:
 - 
- StatementListItem
- StatementList
 
- StatementListItem:
 
- Declaration:
 - 
- HoistableDeclaration
- ClassDeclaration
- LexicalDeclaration
 
- HoistableDeclaration:
 - 
- FunctionDeclaration
- GeneratorDeclaration
 
Here's the grammar production for a function:
FunctionDeclaration → HoistableDeclaration → Declaration → StatementListItem → StatementList
which proves that my former response is wrong (no need to look at the former edits, as it's wrong! ;) ).
A function xx() {} construct alone is a special case, neither — strictly speaking — a statement or an expression, and thus is NOT to be ended with a semicolon.
You only need to add a semicolon (or leave the ASI take care of it) if you're using the expression function() construct, which exists when it is part of a statement. To make it a statement you need to either have it part of a statement:
var foo = function() {};
or embedded within another expression:
(function() {})();
!function x() { ... }();
And in either cases, you need to add the semicolon at the end of the full statement, obviously.
Generally speaking, I like the python mantra "explicit is better than implicit" so when you hesitate to add a semicolon that the ASI would add otherwise, just add it.
sorry for being wrong in the first version of my answer, I'll debug some PHP code as a penitence. ☺
HTH