我在理解我的代码为何有效时遇到了一些困难。我预计会出现引用错误,但一切正常。
我的代码:
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/