如何理解JavaScript中my函数的输出

如何理解JavaScript中my函数的输出,javascript,Javascript,我在网上浏览时发现了这个JavaScript函数 function foo(){ function bar() { return 3; } return bar(); function bar() { return 8; } } console.log(foo()); =>8 这个函数调用时为什么返回8,这真是令人困惑。我假设此代码

我在网上浏览时发现了这个JavaScript函数

   function foo(){
        function bar() {
            return 3;
        }
        return bar();
        function bar() {
            return 8;
        }
    }
    console.log(foo());
    =>8

这个函数调用时为什么返回8,这真是令人困惑。我假设此代码将运行函数的内容,并在
返回栏()处停止并返回3。我在这里遗漏了什么?

这是可变提升的结果<代码>功能
定义优先于其他定义。看起来真的是这样

function foo(){
    var bar;
    bar = function() {
        return 3;
    }
    bar = function() {
        return 8;
    }
    return bar();
}
“因为变量声明(以及一般声明)是在执行任何代码之前处理的,所以在代码中的任何位置声明变量都相当于在顶部声明它。”


这是因为函数声明被提升到块的顶部。函数被提升-不管它是在语句之后声明的,它仍然可以运行。最后一个
bar()
覆盖了第一个。奇怪的是,这是一个纯学术价值的问题吗?为什么会有人写这样的代码?说真的,有什么好的理由吗?@LogicArtister——可能在一个示例中被用来演示提升。值得一提的是,在原始代码中使用
var bar=function(){…}
,实际上会产生不同。