【发布时间】:2023-03-03 19:12:01
【问题描述】:
检查这个fiddle或下面的代码,告诉我为什么这个脚本的输出是10
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
【问题讨论】:
标签: javascript
检查这个fiddle或下面的代码,告诉我为什么这个脚本的输出是10
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
【问题讨论】:
标签: javascript
因为函数中的var 将变量提升到顶部。就好像你在函数的顶部声明了它,所以foo在当前范围内被视为局部变量,全局范围内的foo不受影响。你的代码是这样的:
var foo = 1;
function bar() {
var foo;
if (!foo) {
foo = 10;
}
alert(foo);
}
bar();
如您所见,foo 被声明在函数的顶部并且是 undefined,但重要的是直到在 if 语句中才会获得值。
【讨论】:
function ()... 这样的函数意味着它将被提升到其父级的顶部,就像答案中的 var 一样。所以函数被声明为a,这使得a成为一个局部变量,然后你将1分配给a,所以它不再是一个函数,但仍然被视为一个局部变量,所以全局不是做作的。您可以通过将内部函数更改为c 来测试这个理论,然后您会看到全局a 被修改了。我不知道有任何工具可以显示它是如何解释的,但是一旦你了解了什么是被提升的,什么不是,它就很容易看到了。