需要帮助来了解关闭

时间:2018-07-09 07:52:14

标签: javascript closures frontend

我当时正在理解闭包,并尝试做一些实验,那时候我遇到了这个问题。

当我执行以下代码时:

    var hello;
    hello = 'abc';
    test();
    function test() {
       console.log(hello);
    }

输出: 'abc'

现在,如果我在函数内添加另一个变量声明,则输出将不同

    var hello;
    hello = 'abc';
    test();
    function test() {
       console.log(hello);
       var hello = 'xyz';
    }

输出:未定义

我无法找出它为何以这种方式运行。当执行test()函数时,它会记录变量'hello'直到现在未执行test()函数中的变量声明,因此应为我提供全局hello变量val,但它返回未定义的值。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

这是因为功能测试中的变量hello是hoisted,这意味着:

function test() {
   console.log(hello);
   var hello = 'xyz';
}

实际上与:

相同
function test() {
   var hello;
   console.log(hello);
   hello = 'xyz';
}