console.log(a());
function a(){
console.log("hello");
}
从上面的代码中,我希望在控制台上记录"hello"
(以及一些undefined
s)。但是萤火虫给出了
ReferenceError: a is not defined
所以萤火虫没有悬挂?
答案 0 :(得分:7)
问题的原因是
在子块内声明时,函数不会提升。
by MDN(这里涉及的不是标准的ECMAScript)。
比较以下片段:
alert(c());
function c(){return 42;}
和
{
alert(c());
function c(){return 42;}
}
第一个将提醒42,而第二个将提示ReferenceError
。
以下是使用Firebug时执行的代码:
data;
with(_FirebugCommandLine){ // >> block begins
console.log(a());
function a(){
console.log("hello");
}
} // << block ends
<强>更新强>
观察到的行为似乎是Firefox javascript引擎中的一个小问题,因为在chrome和IE9中没有观察到这种情况,请参阅此fiddle。