如何处理函数声明?
var abc = '';
if(1 === 0){
function a(){
abc = 7;
}
}else if('a' === 'a'){
function a(){
abc = 19;
}
}else if('foo' === 'bar'){
function a(){
abc = 'foo';
}
}
a();
document.write(abc); //writes "foo" even though 'foo' !== 'bar'
Run Code Online (Sandbox Code Playgroud)
此示例在Chrome和Firefox中生成不同的输出.fooFF输出时输出Chrome 19.
请将官方ECMAScript规范视为您的答案来源,而不是特定浏览器供应商发布的文档.(我知道Mozilla使用"函数语句"扩展其JavaScript实现.)
那么,根据ECMAScript规范,ergo,其中定义的句法产品,这是有效的吗?
if (foo) {
function x() { return; }
}
Run Code Online (Sandbox Code Playgroud)
更新:我的问题也可以这样说: Statement生产是否包含 FunctionDeclaration生产?
结论:答案是否定的.