节点中的箭头函数提升?

Jas*_*son 6 javascript function node.js hoisting arrow-functions

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

我的代码:

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

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

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

functionA();
Run Code Online (Sandbox Code Playgroud)

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

? node test.js
Function A Function B
Run Code Online (Sandbox Code Playgroud)

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

因此,我不应该期待一个错误,因为在 FunctionA 中调用它之前没有定义 FunctionB 吗?我在这里失踪了吗?

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

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

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

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

const functionB = () => {
  return "Function B";
};
Run Code Online (Sandbox Code Playgroud)

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

Bre*_*enn 6

正如其他人指出的,当调用 functionA 时,functionB 现在已加载到内存中。

比较以下内容:

const functionA = functionB;

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

functionA();
Run Code Online (Sandbox Code Playgroud)

这将抛出“未捕获的引用错误:functionB 未定义”

将该行为与此进行比较:

const functionA = functionB

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

functionA();
Run Code Online (Sandbox Code Playgroud)

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