【发布时间】:2014-02-06 17:10:54
【问题描述】:
我的一个朋友正在参加一个在线测验,他问了我一个我无法回答的问题。
var global = false;
function test() {
global = true;
return false;
function global() {}
}
console.log(global); // says false (As expected)
test();
console.log(global); // says false (Unexpected: should be true)
如果我们假设函数和 var 变量一起被提升到顶部,让我们试试这个。
var foo = 1;
function bar() {
return foo;
foo = 10;
function foo() {}
var foo = 11;
}
bar();
console.log(foo); //says 1 (But should be 11) Why 1 this time ??
这里有一个JSBin Demo 和JSBIN Demo2 可以玩。
PS:如果我们从test() 中删除function global() {},那么它运行正常。有人可以帮我理解为什么会这样吗?
【问题讨论】:
-
我没有在编辑中添加答案,因为@SLaks 的答案仍然适用。
var foo = 11IS11在该函数的本地范围内。foo = 10被忽略,function foo()仍在创建局部范围变量 foo 以及var foo -
bar() 返回函数
-
@DavidBarker 是的,我现在明白了。感谢您对 Slak 的回答的精彩补充。
-
注意,函数中的
global变量其实是本地的…… -
您也可以通过 Chrome 开发工具逐步完成该过程
标签: javascript global-variables scope