javascript - Node 中的箭头函数提升?

标签 javascript node.js function arrow-functions hoisting

我在理解我的代码为何有效时遇到了一些困难。我预计会出现引用错误,但一切正常。

我的代码:

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 都已定义。

最佳答案

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

比较以下内容:

const functionA = functionB;

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

functionA();

这将抛出“ Uncaught ReferenceError :functionB 未定义”

将该行为与此进行比较:

const functionA = functionB

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

functionA();

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

关于javascript - Node 中的箭头函数提升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54933689/

相关文章:

javascript - 在 node.js 中运行多个 MSSQL 查询

javascript - 在 browser.runtime.getBackgroundPage() 中访问变量

javascript - 用于激活功能的开/关按钮

javascript - 浏览器在哪里存储用 let 或 const 定义的全局变量?

node.js - 具有粘性 session 的 Nodejs 集群

Python: "return <tuple>"不断返回 None

node.js - Mongoose 日期比较

javascript - 如何在 Meteor 中使用嵌入文档

c - 选择排序功能错误

python - 如何创建一个可以直接从shell执行的程序(谐波和)?