在 javascript 中,函数声明的优先级高于变量声明。当两者同名时,函数声明会完全覆盖变量声明,最终保留的是函数定义。

同名函数与变量声明的执行顺序
JavaScript 引擎在执行代码前会进行预编译(Hoisting),将变量和函数的声明提升到作用域顶部。如果存在同名的函数声明和变量声明,函数声明会被优先处理并覆盖变量声明的结果。

console.log(foo); // function foo() { ... }
var foo = 'hello';
console.log(foo); // function foo() { ... }上述代码中,虽然 foo 被重新赋值,但由于函数声明的优先级更高,第二次打印依然输出函数体。变量声明被忽略,但赋值操作依然有效,不过由于函数已经占据该标识符,赋值行为实际上是将函数对象再次赋给该变量,结果不变。
立即学习“Java免费学习笔记(深入)”;
同名变量与变量声明的覆盖规则
当多个 var 声明同名变量时,后声明的变量会覆盖先声明的变量,但最终结果取决于赋值操作的执行时机。变量提升只提升声明,不提升赋值。

var a = 1; var a = 2; console.log(a); // 2
在上述代码中,两个 var 声明都被提升,但赋值操作按顺序执行。第二个赋值覆盖了第一个赋值,因此最终结果为 2。这与函数声明不同,函数声明在提升阶段就确定了值,而变量声明的提升仅创建绑定,值为 undefined,直到赋值语句执行。
基于程序中某个输入、条件或结果的具体问题
在 JavaScript 中,函数声明和变量声明的优先级差异会导致不同的执行结果。理解这一机制有助于避免潜在的 bug 和混淆。


















