面试题 003 - xmfenbei/study-javascript GitHub Wiki

问题:

function test() {
    console.log(a);
    console.log(foo());
    
    var a = 1;
    
    function foo() {
        return 2;
    }
}

test();

请问控制台上会输出什么?

答案:

输出:undefined 和 2

解析:

变量和函数的声明都被提前至函数体的顶部,而同时变量并没有被赋值。因此,当打印变量a时,它虽存在于函数体(因为a已经被声明),但仍然是undefined。换句话说,上面的代码等同于下面的代码:

function test() {
    var a;
    
    function foo() {
        return 2;
    }
    
    console.log(a);
    console.log(foo());
    
    a = 1;
}

test();