You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数声明提升是否早于变量声明?为何变量声明未覆盖同名函数

为什么函数声明不会被同名变量声明覆盖?

首先得搞清楚JS里变量提升和函数提升的实际规则:函数声明的提升优先级确实比变量声明高,但单纯的变量声明(不带赋值)不会覆盖已经提升的函数声明。

咱们拆解你这段代码的执行过程:

  • 提升阶段:JS引擎会先把整个作用域里的声明都提前处理。function a(){}作为函数声明,会被完整提升到作用域顶部,此时变量a已经指向这个函数;而var a只是变量声明,同样会被提升,但因为函数声明优先级更高,而且这个变量声明没有赋值,所以不会改变a的指向。
  • 执行阶段:当代码走到var a;这一行时,这只是重复声明了变量a,但没有给它赋值,所以a仍然保持之前指向函数的状态。
  • 最后console.log(a)自然就输出这个函数了。

如果你的代码改成这样:

function a(){}
var a = undefined;
console.log(a); // undefined

这时变量声明带了赋值操作,执行阶段会把a重新赋值为undefined,输出结果才会是你预期的内容。

内容的提问来源于stack exchange,提问作者Praveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:03:09