It makes sense by calling the function this way:
print(square(5));
function square(n){return n*n}
But why the following calling doesn’t work?
print(square(5));
square = function (n) {
return n * n;
}
What’s the solution if we insist to use the format of “square = function (n)”?
“normal” function declarations are hoisted to the top of the scope, so they’re always available.
Variable declarations are also hoisted, but the assignment doesn’t happen until that particular line of code is executed.
So if you do
var foo = function() { ... }you’re creating the variablefooin the scope and it’s initiallyundefined, and only later does that variable get assigned the anonymous function reference.If “later” is after you tried to use it, the interpreter won’t complain about an unknown variable (it does already exist, after all), but it will complain about you trying to call an
undefinedfunction reference.