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

标签 javascript return evaluation

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

var foo = 1;
function bar() {
    foo = 10;
    return;
    function foo() {}
}
bar();
console.log(foo);

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

1

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

var foo = 1;
function bar() {
    foo = 10;
    return;
}
bar();
console.log(foo);

控制台打印出预期的结果:

10

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

最佳答案

函数声明被提升到其包含上下文的顶部。您实际上是在 bar 函数的顶部创建了一个 var foo

bar 中操作的 foo 是该函数的本地操作,不会影响全局上下文的 foo

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

关于javascript - 在javascript中返回语句后执行的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43617742/

相关文章:

javascript - 如何在 JQuery 数据表中为 PDF 文件提供动态文件名?

java - 使用servlet处理时如何使用javascript设置隐藏变量的值?

python - 'print' 和 'return' 有什么区别?

c++ -++x %= 10 在 C++ 中是否明确定义?

word2vec - word2vec评估结果解读

javascript - 哪个更好,用过滤器或for循环识别数组的一部分

javascript - jQuery - 向上键转到下一个输入字段

java - 安卓/Java : Inexplicably enters catch block but skips line

javascript - Node.js 获取函数的返回值

haskell - 在 Haskell 中将 foldr 与 OR 混合(懒惰?)