代码在javascript中返回语句后执行?

Mar*_*ski 1 javascript evaluation return

我在网上找到了这个简短的JavaScript代码段:

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

我希望在函数bar()中的 return语句之后的内容被忽略,并且变量foo在末尾等于10.但令我惊讶的是,控制台输出了一些非常不同的东西:

1
Run Code Online (Sandbox Code Playgroud)

现在,当我在return语句后删除该行

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

控制台按预期打印出来:

10
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释一下导致foo在前一版代码中返回1的原因是什么?

Dav*_*ton 6

函数声明被提升到其包含上下文的顶部.你实际上是var foobar函数的顶部创建一个.

foo操纵的bar是该函数的本地,并不影响全局上下文foo.

http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html