if / else语句中的函数声明?
函数声明如何处理?
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'
此示例在Chrome和Firefox中产生不同的输出。Chrome输出,foo
而FF输出19
。
回答:
当问这个问题时,ECMAScript5(ES5)盛行。在ES5的严格模式下,函数声明不能嵌套在一个if
块中,如问题所示。在非严格模式下,结果是不可预测的。不同的浏览器和引擎针对如何处理块内的函数声明实现了自己的规则。
许多浏览器都支持ECMAScript2015(ES2015),以至于现在在block中允许使用函数声明。在ES2015环境中,块内的函数声明将作用于该块内。问题中的代码将导致未定义的函数错误,因为该函数a
仅在if
语句范围内声明,因此不存在于全局范围内。
以上是 if / else语句中的函数声明? 的全部内容, 来源链接: utcz.com/qa/407458.html