在javascript中的闭包中重新定义变量之前访问变量

时间:2014-06-24 09:07:51

标签: javascript

考虑以下代码

var scope = "global scope";
function checkscope() {
    console.log(scope);
    var scope = "local scope";
    console.log(scope);
}
checkscope();

这将在控制台中打印以下内容

undefined
local scope

为什么第一个console.log打印undefined而不是"global scope"

1 个答案:

答案 0 :(得分:6)

这是因为hoisting。您的var关键字正在将新的本地scope变量提升到函数的顶部,该变量未定义。

您的代码与:

相同
function checkscope() {
    var scope;
    console.log(scope);
    scope = "local scope";
    console.log(scope);
}

要从函数中访问全局scope,您必须引用全局对象,即浏览器的window。如果全局scope实际上是全局的,而不仅仅是checkscope()的父范围,这将有效。

function checkscope() {
    console.log(window.scope); // access the global
    var scope = "local scope";
    console.log(scope);
}