首先,让我们看看代码。
var a=0;
b=1;
document.write(a);
function run(){
document.write(b);
var b=1;
}
run();
我认为结果应该是01
,但实际上,结果是0undefined
。
然后我修改了这段代码。
var a=0;
b=1;
document.write(a);
function run(){
document.write(this.b); //or document.write(window.b)
var b=1;
}
run();
是的,这次它按照预期运行了。 01
。我不明白,为什么呢?
更有趣的是,我又修改了代码。
var a=0;
b=1;
document.write(a);
function run(){
document.write(b);
//var b=1; //I comment this line
}
run();
结果是01。
那么,有人能解释一下吗?
感谢分享你的观点。 我简化了这段代码。
b=1;
function run(){
console.log(b); //1
}
二:
b=1;
function run(){
var b=2;
console.log(b); //2
}
三:
b=1;
function run(){
console.log(b); //undefined
var b=2;
}
this.b
(以及window.b
)有效,但是在函数中的var b...
之前,只有简单的b
是无效的。在那种情况下,this
和window
是相同的。如果你看过使用函数和局部作用域创建的对象,这可能会让人感到困惑,但这是因为函数可以被用作构造函数。此外,var
声明“升起”到执行之前的作用域顶部的效果被称为变量提升。这就是为什么var b...
是局部的原因。 - Jared Farrish