节点中的箭头函数提升?
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 被提升到您的常量声明之上。
我在理解我的代码为何有效时遇到了一些问题。我期待参考错误,但一切正常。
我的代码:
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 被提升到您的常量声明之上。