节点中的箭头函数提升?

Arrow Function Hoisting in Node?

我在理解我的代码为何有效时遇到了一些问题。我期待参考错误,但一切正常。

我的代码:

const functionA = () => {
  let bResult = functionB();

  console.log("Function A " + bResult);
};

const functionB = () => {
  return "Function B";
};

functionA();

我得到了这个输出(没有错误);

λ node test.js
Function A Function B

据我了解,只有函数声明被提升(而不是函数表达式)http://adripofjavascript.com/blog/drips/variable-and-function-hoisting.html

因此,由于 FunctionB 在 FunctionA 中调用之前未定义,所以我不应该期待错误吗?我是不是遗漏了什么地方?

编辑:感谢大家的回答,我想我明白了。它确实没有被提升,因为如果我一开始就调用 functionA,它会给我一个错误。

functionA(); // ReferenceError: functionA is not defined

const functionA = () => {
  let bResult = functionB();

  console.log("Function A " + bResult);
};

const functionB = () => {
  return "Function B";
};

所以不是吊装的问题。相反,在文件末尾调用 functionA 时,functionA 和 functionB 都已定义。

正如其他人所指出的,在调用函数 A 时,函数 B 现已加载到内存中。

比较以下:

const functionA = functionB;

const functionB = () => {
  return "Function B";
};

functionA();

这将抛出 'Uncaught ReferenceError: functionB is not defined'

将该行为与此进行比较:

const functionA = functionB

function functionB(){
  return "Function B";
};

functionA();

第二个确实有效,因为 functionB 被提升到您的常量声明之上。