var foo = function(){ return 1; };
if (true) {
function foo(){ return 2; }
}
foo(); // 1 in Chrome // 2 in FF
//I just want to be sure, is FF 4 not "standard" in this case?
编辑:
如果我们有这样的结果:
var foo = function(){ return 1; };
if (true) function foo(){ return 2; }
foo(); // is 1 standard or is 2 standard?
发布于 2011-04-23 02:01:22
问题中的代码实际上根本不被当前的ECMAScript语法所允许(从ECMAScript 5开始)。您可以在块内执行var foo = function() {}
,但只能在函数或脚本的顶层执行function foo() {}
。
目前,浏览器以不兼容的方式支持问题中的代码,因为它们都实现了对核心语言的扩展,并且它们实现了不同的扩展。在编译此脚本时,完全符合ECMAScript 5的实现实际上将以SyntaxError结束。
有人提议在ECMAScript中添加这类功能,但它们还没有完全敲定。
发布于 2011-04-23 02:03:06
对于没有在程序顶层或函数体顶层找到的函数声明,没有指定的行为。或者,指定的行为是一个语法错误,因为JavaScript语法不允许这样的函数声明。不同行为的原因是浏览器在历史上一直在这里的地图上,它们仍然如此,因为现有的网站使用浏览器特定的代码路径编写,使得任何人都不可能更改。
无论其价值如何,ECMAScript的未来版本很可能会定义它。但现在你不应该使用它,因为它的行为并不是由规范精确定义的,而且你会在不同的浏览器中得到不同的行为。
https://stackoverflow.com/questions/5758042
复制相似问题