在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);
}