While most script engines support function declarations within blocks, from browser to browser, the implementations are inconsistent with each other.
if (x) {
function foo() {} //foo is hoisted in Chrome, Firefox and Safari, but not in Edge.
}
if (x) {
var foo = function() {}
}