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

关于JavaScript中var变量提升与同名重复声明的相关问题咨询

关于var重复声明与变量提升的问题解答

问题1

同一函数内多次用var声明同名变量,不会在提升后形成var a, a;的格式。

  • JS在代码执行前的预编译阶段,会扫描当前作用域内所有var声明,遇到同名变量只会在作用域的变量对象中注册一次,后续的重复声明会直接被忽略。
  • 初始化前访问a返回undefined的原因:变量提升只会把声明行为提到作用域顶部,赋值操作仍然留在原来的代码位置执行。预编译结束后,a已经是当前作用域的合法变量,但还没执行任何赋值,默认值就是undefined。
  • 输出10的console.log(a)执行时机在var a = 10之后,此时赋值操作已经执行完成,给已经存在的变量a赋值为10,所以输出10而不是undefined,JS直接取当前变量最新的赋值结果即可。

问题2

是的,JS预编译阶段扫描到同一作用域内多个同名var声明时,会自动剔除冗余的声明,仅保留一个变量供后续代码执行,所有的赋值操作都是针对这同一个变量生效。

示例代码执行逻辑拆解

你给出的示例代码,经过变量提升处理后,实际等效于以下执行顺序:

function myFunc() {
  // 所有重复的var a声明被合并,只保留一次声明
  var a;
  console.log(a); // 未赋值,输出undefined
  a = 10;
  console.log(a); // 已赋值为10,输出10
  a = 20; // 冗余的var声明被忽略,只剩赋值逻辑
  console.log(a); // 已重赋值为20,输出20
}

myFunc();

运行代码的输出结果依次为:undefined、10、20。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:04