在JavaScript中,在函数内声明变量,为什么函数获得更高的优先级?

Wei*_*Lin 9 javascript

    function bar() {
        return foo;
        foo = 10;
        function foo() {}
        var foo = 11;
    }
    console.log(typeof bar());
Run Code Online (Sandbox Code Playgroud)

typeof bar返回功能?!为什么不数?

geo*_*org 4

JS 函数执行于JS 函数分两遍、三遍首先,引擎遍历代码,查找函数声明并将它们提升(=将它们移动到顶部),其次,它提升变量声明(除非已经提升了相同的名称),最后它运行“规范化”代码。

在您的代码片段中,引擎选择function foo并将其移动到函数的顶部。后续内容var foo将被忽略。

这会产生以下“标准化”代码:

function bar() {
    function foo() {} 
    return foo;
    foo = 10;
    foo = 11;
}
Run Code Online (Sandbox Code Playgroud)

这解释了你的结果。

参考:声明绑定实例化,注意步骤 5 和 8。