跨浏览器Javascript函数范围问题

时间:2011-11-17 16:30:45

标签: javascript function scope

以下javascript适用于Chrome和IE,但在Firefox中出错,因为在分配给callBar时未定义bar。

那么谁的范围规则正确?

function foo() {

    var callBar = bar;

    if (1 === 1) {
       callBar();
       function bar() {
          alert('yo');
       }
    }
}

foo();

1 个答案:

答案 0 :(得分:5)

根据ECMA规范,不确定是谁“正确”,但它并不重要,因为你无法在所有浏览器中执行此操作并且必须更改代码:)

简单的解释是function语句中的if在技术上是不允许的,浏览器对它们做了奇怪的事情。有些浏览器将此视为表达式,其他浏览器则视为声明。 FF显然将其视为表达式,意味着在代码到达那一点之前它不存在。详细记录可在http://kangax.github.com/nfe/

处获得