3
console.log(a());
function a(){
    console.log("hello");
}

从上面的代码中,我希望"hello"(和一些undefined)能够登录控制台。但萤火虫给

ReferenceError: a is not defined

所以firebug不做吊装?

4

1 回答 1

7

问题的原因是

在子块内声明时,函数不会提升。

MDN(这里涵盖的很多内容不是标准的 ECMAScript)。

比较以下片段:

alert(c());
function c(){return 42;}

{
    alert(c());
    function c(){return 42;}
}

第一个将警告 42,而第二个将 throw ReferenceError

下面是在玩 Firebug 时执行的代码: Firebug 的工具提示

data;
with(_FirebugCommandLine){ // >> block begins
    console.log(a());
    function a(){
        console.log("hello");
    }
} // << block ends

更新
观察到的行为似乎是 Firefox javascript 引擎中的一个小故障,因为在 chrome 和 IE9 中没有观察到它,请参阅this fiddle

于 2012-07-27T18:47:28.630 回答