问题描述
|
在下面的代码中:
(function (){
function test(){};//\"function\"
var test;//\"undefined\"
var printTest = typeof test;
document.write(printTest);
})();
printTest将显示\“ function \”而不是\“ undefined \”,这是有道理的,因为根据我的理解,任何变量声明都始终被“悬挂”在执行上下文的顶部(在这种情况下为函数执行上下文) )这使函数声明\“ test()\”成为稍后在当前执行上下文中出现的声明。现在考虑这段代码,在这里我实际上为var声明\“ var test = 1 \”赋了一个值。
(function (){
function test(){};
var test=1;//assign value to a variable here
var printTest = typeof test;
document.write(printTest);
})();
然后printTest现在显示\“ number \”,这意味着执行上下文现在保持不同的顺序。有人可以解释一下这里实际发生了什么吗?
解决方法
吊装将实际分配与变量声明分开。它真正在做什么是这样的:
(function (){
var test,printTest;
test = function (){};
test = 1;//assign value to a variable here
printTest = typeof test;
document.write(printTest);
})();
, “ 3”仅表示“任何测试都应在本地范围内”。它之所以未定义,仅是因为您没有为它分配值(除非您使用function test(){};
,这就是为什么您得到function
而不是undefined
)的原因。
在第二个示例中,function test(){};
仍为其分配一个功能,但var test=1;
用with9ѭ覆盖该功能。给the9赋值后再使用use10ѭ,它会报告它是一个数字。