Open artdong opened 4 years ago
在JavaScript中,变量和函数声明会在代码执行之前被提升到其所在作用域的顶部。但是,这种提升只涉及到声明部分,而不包括赋值。
让我们针对你的例子重新解释:
console.log(a); // 输出:function a() {}
var a = 1;
console.log(a); // 输出:1
function a() {}
console.log(a); // 输出:1
变量和函数声明提升:
a
和函数 a
都被提升到作用域的顶部。在提升阶段,函数声明会覆盖变量声明。代码执行:
第一个 console.log(a);
遇到的是函数声明,因为在提升阶段,函数声明覆盖了变量声明。所以输出 function a() {}
。
var a = 1;
这一行的赋值部分不会影响提升阶段的输出。在提升阶段,a
被视为函数。
第二个 console.log(a);
输出的是变量 a
的值,因为在这一行之前,变量 a
已经被重新赋值为 1
。所以输出 1
。
第三个 console.log(a);
输出的仍然是变量 a
的值,即 1
。
总体来说,提升阶段会将声明提升到作用域的顶部,函数声明会覆盖变量声明,但赋值部分不会在提升阶段执行。
请写出一下代码运行结果