【发布时间】:2011-09-13 05:07:46
【问题描述】:
在下面的代码中:
(function (){
function test(){};//"function"
var test;//"undefined"
var printTest = typeof test;
document.write(printTest);
})();
printTest 将显示“函数”而不是“未定义”,这是有道理的,因为根据我的理解,任何变量声明总是“提升”到执行上下文的顶部(在这种情况下是函数执行上下文)这使得函数声明“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 现在显示“数字”,这意味着执行上下文现在保持不同的顺序。有人能解释一下这里到底发生了什么吗?
【问题讨论】:
-
函数声明不以分号结尾,因此您在
function test行末尾的;被评估为在该位置无用的空语句。因此,删除该分号。
标签: javascript hoisting