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 都已定义。
正如其他人指出的,当调用 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 被提升到常量声明之上。
| 归档时间: |
|
| 查看次数: |
2993 次 |
| 最近记录: |