Javascript console.log()未按预期工作

Javascript console.log()未按预期工作,javascript,Javascript,问题:有什么可以安慰的 var foo = 'outside'; function logIt() { console.log(foo); var foo = 'inside'; } logIt(); 回答:未定义 var foo = 'outside'; function logIt() { console.log(window.foo); var foo = 'inside'; } logIt(); 有人能解释为什么会发生这种情况。var语句被挂起

问题:有什么可以安慰的

var foo = 'outside';

function logIt() {
    console.log(foo);
    var foo = 'inside';
}

logIt();
回答:
未定义

var foo = 'outside';

function logIt() {
    console.log(window.foo);
    var foo = 'inside';
}
logIt();

有人能解释为什么会发生这种情况。

var
语句被挂起

函数中只有一个变量可以访问:在
var foo='inside'行上创建的变量

当您记录它的值时,您是在赋值之前进行的,因此它是
未定义的

您无法从函数中访问同名的全局变量,因为您已通过声明同名的局部作用域变量来屏蔽它

var foo = 'outside';

function logIt() {
    var foo;
    console.log(foo);
    foo = 'inside';
}

logIt();
这就是脚本的解释方式。因此它给出了
undefined

var foo = 'outside';

function logIt() {
    console.log(window.foo);
    var foo = 'inside';
}
logIt();
这就是所谓的

以这种方式重新声明
foo
,将其设置为
undefined

var foo = 'outside';

function logIt() {
    console.log(window.foo);
    var foo = 'inside';
}
logIt();

logIt函数假定
foo
在其范围内。要使用全局变量,您需要使用
window.variable\u name

,因为
foo
也定义在
logIt
的范围内,并被提升到顶部。我确信我自己正确理解了这一点——他编写的函数与:function logIt(){var foo;console.log(foo);foo=“inside”}@millerbr-用于所有实际用途。对