这是一个简单的片段,我只是不明白的东西.
下面的代码输出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();