考虑以下代码
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"
?
答案 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);
}