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

在javascript中的闭包中重新定义变量之前访问该变量,javascript,Javascript,考虑以下代码 var scope = "global scope"; function checkscope() { console.log(scope); var scope = "local scope"; console.log(scope); } checkscope(); 这将在控制台中打印以下内容 undefined local scope 为什么第一个控制台.log打印未定义而不是“全局范围”?这是因为。您的var关键字正在将一个新的本地scope变量提

考虑以下代码

var scope = "global scope";
function checkscope() {
    console.log(scope);
    var scope = "local scope";
    console.log(scope);
}
checkscope();
这将在控制台中打印以下内容

undefined
local scope
为什么第一个
控制台.log
打印
未定义
而不是
“全局范围”

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

您的代码与以下代码相同:

function checkscope() {
    var scope;
    console.log(scope);
    scope = "local scope";
    console.log(scope);
}
要从函数中访问全局
范围
,必须引用全局对象,即浏览器的
窗口
。如果全局
作用域
实际上是全局的,而不仅仅是在
checkscope()的父作用域中,这将起作用


是否有方法访问包含
全局范围的变量最初未定义的
@devian如果它是真正的全局的,那么
window.scope
就可以工作了。但是不要这样做,除非你真的必须这样做。@devian如果你想从全局作用域访问局部
作用域
变量,那么它是不可访问的。如果要从函数中访问全局
scope
变量,则
窗口。scope
将起作用。
function checkscope() {
    console.log(window.scope); // access the global
    var scope = "local scope";
    console.log(scope);
}