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

JavaScript中为何代码返回第二个函数b的8而非第一个的3?

为什么你的JavaScript代码返回8而不是3?

这是**函数声明的变量提升(Hoisting)**导致的结果,核心原因是:函数声明会被完整提升到当前作用域的顶部,且同名的函数声明,后面的会直接覆盖前面的。

拆解你的代码执行过程

当你调用a()时,JavaScript引擎会先处理a函数内部的变量提升阶段,再执行代码:

  1. 变量提升阶段:把所有函数声明移到a函数作用域的最顶部。你的代码里有两个function b()声明,提升后顺序是:
    function b() { return 3; }
    function b() { return 8; } // 这个声明直接覆盖了前面的b
    
  2. 代码执行阶段:此时开始按顺序执行代码,遇到return b()时,b已经被后面的函数声明覆盖了,所以调用的是返回8的那个b函数,最终结果就是8。

补充说明

如果把函数声明改成函数表达式(比如var b = function(){ return 3; }),就不会出现这种覆盖——因为变量提升只提升变量声明,不提升函数体,只有后面的赋值操作才会改变变量指向,但你的代码用的是函数声明,所以会被完整提升并覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:34:54