这是一个简单的片段,我只是不明白。
下面的代码输出 12,我明白了,因为 var foo = 12;
替换了之前的变量声明。
<script>
var foo = 1;
function bar(){
if (!foo) {
var foo = 12;
}
alert(foo);
}
bar();
</script>
在下面的代码中,它警告 1 ,这意味着在函数外部声明的变量在函数内部是可以访问的。
<script>
var foo = 1;
function bar(){
alert(foo);
}
bar();
</script>
但是,在下面的代码中,为什么会提示 undefined ?我想,它会提醒 1,我只是将之前声明的变量分配给新变量。
<script>
var foo = 1;
function bar(){
if (!foo) {
var foo = foo;
}
alert(foo);
}
bar();
</script>
最佳答案
变量声明被推到函数的开头。
因此实际上发生了以下情况:
function bar(){
var foo;
if (!foo) {
foo = foo;
}
alert(foo);
}
因此您需要将其更改为使用 window.foo
以便您指的是全局属性而不是函数的属性:
var foo = 1;
function bar(){
var foo;
if (!window.foo) {
foo = window.foo;
}
alert(foo);
}
bar();
关于Javascript-变量提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540709/