虽然我无法在 google 中轻松找到对此的引用,但我熟悉这样一个事实,即在 javascript 中,全局函数声明在执行任何代码之前都会被解释。换句话说,这很好用:
f();
function f() {}
但是,我注意到 chrome 和 firefox 对全局函数声明的含义有不同的解释。特别是,chrome 很高兴在第一遍中读取 if 块内的函数声明,但 firefox 不是。
try {document.write(f);} // works in chrome
catch(e) {document.write(e.message);} // throws an error in firefox
try {document.write(g);} // works in chrome and firefox
catch(e) {document.write(e.message);}
if(true) function f() {}
function g() {}
你可以用这个fiddle自己试试这个例子。我使用的是 Chrome 16.0.912.75 和 Firefox 9.0.1。
这种行为的 ECMA 标准是什么?在其他代码之上“提升”函数声明的过程是否有术语?哪些代码被“解除”以供解释(两个浏览器都正确)?或者它是其中一个的错误?