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的原因是什么?
函数声明被提升到其包含上下文的顶部.你实际上是var foo在bar函数的顶部创建一个.
被foo操纵的bar是该函数的本地,并不影响全局上下文foo.
http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |