Arrow Function Hoisting in Node? [duplicate]

淺唱寂寞╮ 提交于 2021-01-27 06:50:04

问题


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.


回答1:


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.



来源:https://stackoverflow.com/questions/54933689/arrow-function-hoisting-in-node

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!