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