我在网上找到了这个简短的 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/