问问题
1465 次
1 回答
9
根据评论,有问题的代码是:
var scope = "global";
function checkscope() {
console.log(scope);
var scope;
console.log(scope);
}
这将记录undefined
两次,因为var
声明(以及函数声明)被提升到当前范围的顶部。上面的脚本解释为:
var scope = "global";
function checkscope() {
var scope; //declaration hoisted up to top of scope
console.log(scope);
console.log(scope);
}
与checkscope
局部scope
变量一样,局部scope
变量会隐藏外部范围的scope
变量。
局部scope
变量没有赋值,相当于 JavaScript 的原生undefined
值。
旁注:如果有问题的外部范围是全局范围,在浏览器环境中,您仍然可以scope
通过引用全局对象 ( window
) 来访问全局变量:
var scope = "global";
function checkscope() {
var scope; //declaration hoisted up to top of scope
console.log(scope); //undefined
console.log(window.scope); //"global"
}
如您所见,在全局范围内声明的变量成为window
对象的属性。
当外部范围是非全局的时,这个技巧不是很有用,scope
除非您重命名变量,否则该变量将保持阴影。据我所知,没有标准化的方法可以访问父作用域执行上下文的阴影属性(变量/函数)。
于 2013-05-05T02:57:24.770 回答