【发布时间】:2011-03-07 18:00:58
【问题描述】:
考虑以下 JavaScript 代码:
(function(){
foo();
function foo(){ alert('Hello, World!'); }
})();
在 Firefox、Opera 和 Chrome 中,这符合预期;我们收到警报。现在对比一下:
(function(){
if (true){
foo();
function foo(){ alert('Hello, World!'); }
}
})();
Firefox 3.6 和 4(测试版)(即两者都使用 SpiderMonkey)抛出异常:foo is not defined
Chrome(即 V8)和 Opera(即 Opera 使用的任何引擎)按预期工作(由我)。
哪个是正确的行为,还是由实现来决定?
FWIW,再把它包在一个函数里,再去FF就好了:
(function(){
if (true){
(function(){
foo();
function foo(){ alert('Hello, World!'); }
})();
}
})();
【问题讨论】:
-
我想你会在这里找到答案:stackoverflow.com/questions/4069100/…
-
谢谢,菲利克斯。这把我带到了这里:jibbering.com/faq/#functionStatement
标签: javascript firefox