以下javascript适用于Chrome和IE,但在Firefox中出错,因为在分配给callBar时未定义bar。
那么谁的范围规则正确?
function foo() {
var callBar = bar;
if (1 === 1) {
callBar();
function bar() {
alert('yo');
}
}
}
foo();
答案 0 :(得分:5)
根据ECMA规范,不确定是谁“正确”,但它并不重要,因为你无法在所有浏览器中执行此操作并且必须更改代码:)
简单的解释是function
语句中的if
在技术上是不允许的,浏览器对它们做了奇怪的事情。有些浏览器将此视为表达式,其他浏览器则视为声明。 FF显然将其视为表达式,意味着在代码到达那一点之前它不存在。详细记录可在http://kangax.github.com/nfe/