I'm having a bit of trouble understanding why my code works. I'm expecting a reference error, but everything works fine.
My code:
const functionA = () => {
let bResult = functionB();
console.log("Function A " + bResult);
};
const functionB = () => {
return "Function B";
};
functionA();
I get this output (no errors);
λ node test.js
Function A Function B
As I understand it, only function declarations are hoisted (not function expressions) http://adripofjavascript.com/blog/drips/variable-and-function-hoisting.html.
Thus, shouldn't I expect an error as FunctionB isn't defined before it's called in FunctionA? Am I missing somewhere here?
EDIT: Thanks for the answers everyone, I think I figured it out. It's indeed not getting hoisted because if I call functionA at the beginning, it gives me an error.
functionA(); // ReferenceError: functionA is not defined
const functionA = () => {
let bResult = functionB();
console.log("Function A " + bResult);
};
const functionB = () => {
return "Function B";
};
So it's not a question of hoisting. Rather, by the time functionA is called at the end of the file, both functionA and functionB have been defined.
As someone else pointed out, by the time functionA is called, functionB is now loaded into memory.
Compare the following:
const functionA = functionB;
const functionB = () => {
return "Function B";
};
functionA();
This will throw 'Uncaught ReferenceError: functionB is not defined'
Compare that behavior to this:
const functionA = functionB
function functionB(){
return "Function B";
};
functionA();
The second one actually works, because functionB is hoisted above your constant declaration.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With